python hashlib模块及md5() 、sha()
hashlib模块是python2.5 以后出现的一个包,其主要涉及安全和加密。而且hashlib 得到openssl 的“支持” ,其支持openssl 库提供的所有算法,具体包括md5、sha1、sha224、sha256、sha512等。详细用法,可以通过pydoc hashlib 查看,这里结合两个简单的示例,看下其用法。
一、获取某字符串的md5值
比如在涉及到web 站内用户密码时,经常会将管理员帐户的密码进行md5加密后,再存入数据库。假设admin用户的密码为361way ,通过python代码可以进行如下操作:
1>>> import hashlib
2>>> m = hashlib.md5()
3>>> m.update("361way")
4>>> m.hexdigest()
54ac40dc92ce5bc8bbe3d28849f0be1e9
查看帮助时,会现还有一个digest方法。两者的区别如下:
- md5.digest() 返回16字节的摘要,由传给update的string生成,摘要没有ascii字符
- md5.hexdigest() 以16进制的形式返回摘要,32位
同样,还是上面的361way 字符,执行m.digest()的结果如下:
1>>> m.digest()
2'J\xc4\r\xc9,\xe5\xbc\x8b\xbe=(\x84\x9f\x0b\xe1\xe9'
如果对hashlib的方法十分熟练的话,上面的代码可以直接简写为如下:
1>>> import hashlib
2>>> hashlib.md5("361way").hexdigest()
3'4ac40dc92ce5bc8bbe3d28849f0be1e9'
sha算法一样,只不过将md5方法换成相应的sha方法。不同的是sha算法执行出的结果更长,相应的比md5计算过程稍慢,所以md5经常用来做用户密码的存储。而sha1则经常用作数字签名。
二、确认文件的md5值
经常我们通过比对文件前后的md5 值 ,来确认文件是否被修改。该部分实现的代码的功能和linux 下md5sum指令的功能相同。具体代码如下:
1#!/usr/bin/python
2#encoding=utf-8
3import io
4import sys
5import hashlib
6import string
7def printUsage():
8 print ('''Usage: [python] pymd5sum.py <filename>''')
9def main():
10 if(sys.argv.__len__()==2):
11 #print(sys.argv[1])
12 m = hashlib.md5()
13 file = io.FileIO(sys.argv[1],'r')
14 bytes = file.read(1024)
15 while(bytes != b''):
16 m.update(bytes)
17 bytes = file.read(1024)
18 file.close()
19 #md5value = ""
20 md5value = m.hexdigest()
21 print(md5value+"\t"+sys.argv[1])
22 #dest = io.FileIO(sys.argv[1]+".CHECKSUM.md5",'w')
23 #dest.write(md5value)
24 #dest.close()
25 else:
26 printUsage()
27main()
具体代码我存放到我的github页面上。为避免文件过大,内存使用率过高,这里在读取文件时是以1024 byte为单位进行读取 。其他相关模块还有hmac ,主要用于进行密码消息签名与验证。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/python-hashlib-md5-sha/4249.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.