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