您好,登錄后才能下訂單哦!
工作中用到了MD5值來進行對文件校驗,MD5本身就是一個很出色的算法,一定程度上解決了hash散列的沖突,關于MD5的內容網上也有很多,這里只要是進行一個實驗,驗證一下文件校驗方面的工作,因為習慣使用了python來完成這樣的任務,這里也是使用python,了解到python本身自帶有hashlib模塊,該模塊中就包含了所需的MD5方法,當然python也有專門的MD5模塊可以使用,使用得當發的大同小異,但是個人覺得hashlib模塊更好用一些,今天就使用python的os、commands還有hashlib三個模塊來進行實驗,其中,前兩個模塊主要是為了可以在python腳本中執行Linux的shell命令,以此來驗證一下同一個文件以及文件內容是否可以得到與hashlib模塊MD5方法相同的MD5值,好了不多說了,下面是程序,很簡單的一個驗證,里面都有詳細的注釋就不多解釋了:
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 功能:校驗文件MD5值 ''' import hashlib, binascii import md5 import os import commands #使用python自帶的hashlib庫 def get_md5_value(str): my_md5 = hashlib.md5()#獲取一個MD5的加密算法對象 my_md5.update(str) #得到MD5消息摘要 my_md5_Digest = my_md5.hexdigest()#以16進制返回消息摘要,32位 return my_md5_Digest #使用python自帶的hashlib庫如果m.update(a)之后在 m.update(b),那么就相當于m.update(a+b),這里驗證一下 def get_md5_value_two(str1, str2): my_md52 = hashlib.md5() my_md52.update(str1) my_md52.update(str2) my_md52_Digest = my_md52.hexdigest() return my_md52_Digest #使用SHA1 def get_sha1_value(str): my_sha = hashlib.sha1() my_sha.update(str) my_sha_Digest = my_sha.hexdigest() return my_sha_Digest
#利用os模塊system()方法獲取文件的MD5值 def get_file_md5_value(filename): return os.system('md5sum ' + filename + '|cut -f1') #利用os模塊popen()方法獲取文件的MD5值 def get_popen_file_md5_value(filename): return os.popen('md5sum ' + filename + '|cut -f1') #獲取文件內容的MD5值 def get_file_content_md5_value(filename): fp = open(filename) fp_content = fp.read() return get_md5_value(fp_content) #利用commands模塊獲取文件的MD5值 def get_commands_file_md5_value(filename): return commands.getoutput('md5sum ' + filename + '|cut -f1')
if __name__ == '__main__': string1 = 'We are friends!!!' string2 = 'Do agree with me?' filename = 'Linux.txt' result_md5_value = get_md5_value(string1) result_sha1_value = get_sha1_value(string1) print '-------------------------------------------------' print '原始字符串為:'+string1 print 'hashlib模塊MD5值為:'+result_md5_value,len(result_md5_value) print 'SHA1值為:'+result_sha1_value,len(result_sha1_value) print '-------------------------------------------------' result_md5_value = get_md5_value(string2) result_sha1_value = get_sha1_value(string2) print '原始字符串為:'+string2 print 'hashlib模塊MD5值為:'+result_md5_value,len(result_md5_value) print 'SHA1值為:'+result_sha1_value,len(result_sha1_value) print '----------------------驗證---------------------------' result_md5_value = get_md5_value(string1+string2) result_sha1_value = get_sha1_value(string1+string2) print '原始字符串為:', string1+string2 print 'hashlib模塊MD5值為:'+result_md5_value,len(result_md5_value) print 'SHA1值為:'+result_sha1_value,len(result_sha1_value) print '-----------------------整體MD5--------------------------' result_md52_value = get_md5_value_two(string1, string2) print '原始字符串為:', string1+string2 print 'hashlib模塊MD5值為:'+result_md52_value,len(result_md52_value) print '****************************os模塊獲取文件的MD5值為*******************************************' result_file_value = get_file_md5_value(filename) print result_file_value result_popen_file_md5_value = get_popen_file_md5_value(filename) print result_popen_file_md5_value print '*****************************os模塊獲取文件內容的MD5值為******************************************' result_file_content_value = get_file_content_md5_value(filename) print result_file_content_value, len(result_file_content_value) print '*****************************commands模塊獲取文件的MD5值為******************************************' result_commands_file_md5_value = get_commands_file_md5_value(filename) print result_commands_file_md5_value, len(result_commands_file_md5_value)
下面是結果:
------------------------------------------------- 原始字符串為:We are friends!!! hashlib模塊MD5值為:469306cbddd0cc5917b9536c54e619ab 32 SHA1值為:7a3f8637b61108f702052dda52e1251392228260 40 ------------------------------------------------- 原始字符串為:Do agree with me? hashlib模塊MD5值為:54f45c7d0aa071186a0ec4a030213d8a 32 SHA1值為:0a2c0f3317862f7055605e1faab7f02f35f466de 40 ----------------------驗證--------------------------- 原始字符串為: We are friends!!!Do agree with me? hashlib模塊MD5值為:bd77df50992d4d8b65f19d47a15132fe 32 SHA1值為:83bc19fc724aaa991a0278fbb1be210bc28757fb 40 -----------------------整體MD5-------------------------- 原始字符串為: We are friends!!!Do agree with me? hashlib模塊MD5值為:bd77df50992d4d8b65f19d47a15132fe 32 ****************************os模塊獲取文件的MD5值為******************************************* 80d566209acf154dcfdd25f9079792f6 Linux.txt 0 <open file 'md5sum Linux.txt|cut -f1', mode 'r' at 0x7f6d99b010c0> *****************************os模塊獲取文件內容的MD5值為****************************************** 80d566209acf154dcfdd25f9079792f6 32 *****************************commands模塊獲取文件的MD5值為****************************************** 80d566209acf154dcfdd25f9079792f6 Linux.txt 43
感覺還是效率很不錯的,感興趣的同學可以拿去實驗一下,這里使用到的文件Linux.txt粘貼出來:
1.[root@localhost/root]# 表示登陸進去系統,其中#是超級用戶也即root用戶的系統提示符 2.reboot命令可以重啟系統 3.關閉系統使用(該命令只可被超級用戶使用):shutdown[選項][時間][警告信息] -k:不真正關機只是發警告系想你給所有用戶 -r:關機后立刻重啟 -h:關機后不啟動 -f:快速關機重啟時跳過fsck -n:快速關機不經過init程序 -c:取消一個已經運行的shutdown 4.文件操作命令 ls -a列出目錄下面所有文件名包括隱藏的文件即以“.”開頭的文件 ls -l使用長格式列出文件 ls -F在列出的文件名稱后面加一個符號(如可執行文件加*目錄加/) mkdir filename創建新的目錄 rmdir filename刪除已經建立的目錄 cd filename 進入文件目錄 cp -r 源文件 目的文件 復制文件 rm -r filename刪除該目錄以及目錄下所有的子目錄 rm -f不經確認強制刪除文件 rm -i filename 刪除文件 mv 源文件路徑 目的文件路徑 移動文件命令 mv filename1 filename2 重命名 cat filename顯示文本文件內容 cat file1 file2 file3依次顯示3個文件 cat -n filename顯示文檔內容的同時顯示行號 more filename顯示文本文件(內容較多的) pwd顯示當前路徑 5.用戶以及用戶組管理 useradd username創建新的用戶 userdel username刪除用戶 groupadd groupname創建新的用戶組 groupdel groupname刪除用戶組 su -username賦予普通用戶特權或超級用戶別的身份 chomd[who][+|-|=][mode]filename勇于改變文件或者目錄的訪問權限 chown[用戶:組]文件 用于更改某個文件或者目錄的屬主和屬組 6.進程管理命令 ps -e顯示所有的進程 ps -f全格式 ps -l長格式 top 動態顯示當前進程和其他情況輸入,可以加上參數: q可以退出查看的頁面 (空格)立即刷新顯示 h/?顯示幫主畫面 m切換顯示內存信息 t切換顯示進程和CPU信息 c切換顯示命令名稱和完整命令行 M根據駐留內存大小進行排序 P根據CPU使用百分比大小進行排序 kill命令用于殺死后臺的進程主要有兩種使用方法: kill[-s 信號] 進程號 殺死指定進程 kill -l顯示進程列表 cron命令用來實現定時任務的完成,非手工啟動 cron -l查看目前已經存在的cron任務 7.磁盤及文件命令 df -k顯示各個分區的磁盤空間使用情況 mount[選項]設備 目錄 掛載文件 umount[-f]directory強制卸載一個文件系統 8.軟件安裝命令 tar -c filename創建一個新的檔案文件 tar -t filename查看檔案文件的內容 tar -x filename分解檔案文件的內容 tar -f filename指定檔案文件的名稱 tar -v filename顯示過程信息 tar -z filename采用壓縮方式 rpm -i packagename安裝包 rpm -U packagename升級包 rpm -qa列出已經安裝的全部軟件包 rpm -qf filename查詢某個特定的文件屬于哪個包 rpm -qi packagename查詢某個包的功能 rpm -e packagename刪除包 9.vim使用 vim有三個模式:命令行模式、文本輸入模式、末行模式 輸入vim即可進入vim編輯器,點擊ESC即可進入命令行模式,點擊i即可進入文本編輯模式輸入:即可進入末行模式 在末行模式輸入q即可退出;輸入wq即可保存操作后退出;輸入q!強制退出 10.head/tail head -n x filename查看文件的前x行內容 tail -n y filename查看文件的后y行內容 head filename查看文件的前十行內容 tail filename查看文件的后十行內容 tail -f filename顯示后十行內容,并且在內容增加后自動顯示新增的文件內容 11.網絡配置 ifconfig -a查看所有網卡狀態信息 ifconfig -V查看ifconfig命令版本信息 ifconfig -s查看統計信息 ifconfig eth ipaddress 設置網卡IP ifconfig eth down 關閉網卡 ifconfig eth up啟動激活網卡 ifconfig eth netmask netmaskaddress 設置網卡的子網掩碼地址 ifconfig eth ipaddress netmask netmaskaddress 同時設置IP和子網掩碼地址 ifconfig eth查看網卡狀態 route查看路由信息 route add -net ipaddress netmask netmaskaddress dev eth指定接口 netstat顯示網絡情況 ping檢測網絡連通性 nslookup ip查看該IP對應的域名 host domainname查詢對應域名的IP 12.時間 /sbin/hwclock --show查看當前硬件時間 /sbin/hwclock --hctosys將硬件時間同步到Linux系統 /sbin/hwclock --systohc將Linux時間同步到硬件時間 13.文檔 df -k以KB為單位顯示各分區的信息 df -a顯示所有分區包括大小為0的分區 df -T顯示分區類型 du -b /file以字節為單位顯示file文件夾下各個文件夾的大小 du -ks file以KB為單位顯示file文件夾總大小 iostat顯示CPU的情況 tar -c創建包 tar -x解包 tar -t列出包中的內容 tar -r增加文件到指定包中 tar -u更新包中的文件 tar -zcvf file.tar.gz file壓縮file tar -zxvf file.tar.gz file解壓縮file.tar.gz find -name file1查找file1 grep[命令選項]要查找的匹配模式[要查找的文件] 查找文件 grep str1 file在file中查找字符串str1 grep -r str1 /file在/file及其子目錄下所有文件中查找字符串str1 ps -ef | grep filename在所有進程中查找包含filename的進程信息 14服務 service tomcat4 start啟動tomacat4服務 service tomcat4 stop關閉tomacat4服務
今天的實驗就這些了。
以上這篇python 獲取字符串MD5值方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。