溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python 獲取字符串MD5值方法

發(fā)布時(shí)間:2020-09-14 22:02:43 來(lái)源:腳本之家 閱讀:349 作者:Together_CZ 欄目:開(kāi)發(fā)技術(shù)

工作中用到了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è)參考,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI