python hashlib_python hashlib模块及md5() 、sha()
hashlib模塊是python2.5 以后出現(xiàn)的一個包,其主要涉及安全和加密。而且hashlib 得到openssl 的“支持” ,其支持openssl 庫提供的所有算法,具體包括md5、sha1、sha224、sha256、sha512等。詳細用法,可以通過pydoc hashlib 查看,這里結(jié)合兩個簡單的示例,看下其用法。
一、獲取某字符串的md5值
比如在涉及到web 站內(nèi)用戶密碼時,經(jīng)常會將管理員帳戶的密碼進行md5加密后,再存入數(shù)據(jù)庫。假設(shè)admin用戶的密碼為361way ,通過python代碼可以進行如下操作:
>>> import hashlib
>>> m = hashlib.md5()
>>> m.update("361way")
>>> m.hexdigest()
4ac40dc92ce5bc8bbe3d28849f0be1e9
查看幫助時,會現(xiàn)還有一個digest方法。兩者的區(qū)別如下:
md5.digest() 返回16字節(jié)的摘要,由傳給update的string生成,摘要沒有ascii字符
md5.hexdigest() 以16進制的形式返回摘要,32位
同樣,還是上面的361way 字符,執(zhí)行m.digest()的結(jié)果如下:
>>> m.digest()
'J\xc4\r\xc9,\xe5\xbc\x8b\xbe=(\x84\x9f\x0b\xe1\xe9'
如果對hashlib的方法十分熟練的話,上面的代碼可以直接簡寫為如下:
>>> import hashlib
>>> hashlib.md5("361way").hexdigest()
'4ac40dc92ce5bc8bbe3d28849f0be1e9'
sha算法一樣,只不過將md5方法換成相應(yīng)的sha方法。不同的是sha算法執(zhí)行出的結(jié)果更長,相應(yīng)的比md5計算過程稍慢,所以md5經(jīng)常用來做用戶密碼的存儲。而sha1則經(jīng)常用作數(shù)字簽名。
二、確認(rèn)文件的md5值
經(jīng)常我們通過比對文件前后的md5 值 ,來確認(rèn)文件是否被修改。該部分實現(xiàn)的代碼的功能和linux 下md5sum指令的功能相同。具體代碼如下:
#!/usr/bin/python
#encoding=utf-8
import io
import sys
import hashlib
import string
def printUsage():
print ('''Usage: [python] pymd5sum.py ''')
def main():
if(sys.argv.__len__()==2):
#print(sys.argv[1])
m = hashlib.md5()
file = io.FileIO(sys.argv[1],'r')
bytes = file.read(1024)
while(bytes != b''):
m.update(bytes)
bytes = file.read(1024)
file.close()
#md5value = ""
md5value = m.hexdigest()
print(md5value+"\t"+sys.argv[1])
#dest = io.FileIO(sys.argv[1]+".CHECKSUM.md5",'w')
#dest.write(md5value)
#dest.close()
else:
printUsage()
main()
具體代碼我存放到我的github頁面上。
為避免文件過大,內(nèi)存使用率過高,這里在讀取文件時是以1024 byte為單位進行讀取 。
其他相關(guān)模塊還有hmac ,主要用于進行密碼消息簽名與驗證。
總結(jié)
以上是生活随笔為你收集整理的python hashlib_python hashlib模块及md5() 、sha()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux vim tag,Vim基础知
- 下一篇: oracle 9i hwm,Oracle