版权声明:转载请标明出处 https://blog.csdn.net/w1418899532/article/details/84203632
- 1.Python的hashlib库用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法。
- 2.要想得到文件或者字符串的md5值可以使用Python的hashlib模块,python3.x已经把md5模块移除了。
1,初试Python MD5
#使用Python库求MD5
import hashlib
#求字符串MD5
def getMd5(str):
#获取一个MD5的加密算法对象
md5_value = hashlib.md5()
#得到MD5消息摘要
md5_value.update(str)
#以16进制返回消息
md5_value_hexDigest = md5_value.hexdigest()
print(md5_value_Digest)
if __name__=="__main__":
getMd5('test123')
报出错误如下:
md5 = hashlib.md5('test123').hexdigest()
TypeError: Unicode-objects must be encoded before hashing
解决方法:
update得到消息摘要时字符串要经过utf8编码。
md5_value = hashlib.md5()
#得到MD5消息摘要
md5_value.update(str.encode('utf-8'))
#以16进制返回消息
md5_value_Digest = md5_value.hexdigest()
运行得到结果:
cc03e747a6afbbcbf8be7668acfebee5
【注意】
- 1.与字符串test123在MD5在线加密工具加密结果32位相一致。
- 2.MD5的128位是指二进制位。二进制太长,所以一般都改写成16进制,每一位16进制数可以代替4位二进制数,所以128位二进制数写成16进制就变成了128/4=32位。
- 3.上面字符串尝试了使用utf-8编码和gb2312编码,二者输出结果一致。对于含有中文的字符串,使用utf-8编码输出结果与MD5在线加密工具加密结果32位相一致。
2.二探文件MD5
计算文件内容的MD5值。
def getfileMd5(filename):
fileObj = open(filename)
fileContent = fileObj.read()
getfilemd5=getMd5(fileContent)
return getfilemd5
print(getfilemd5)
文件内容:
输出MD5值:c378a790f74c0fdb35da31263aebf3f8
与测试结果一致。
3.文件名以文件的MD5值命名
将文件夹中txt文件用文件的MD5值来命名。
import hashlib
import os
#txt文件以文件的MD5值来命名
def fileMd5Rename(path):
count = 1
for filename in os.listdir(path):
if filename.endswith('.txt'):
oldname = os.path.join(path,filename)
newname = getfileMd5(oldname)
os.rename(oldname,newname+'.md5')
count += 1
if __name__=="__main__":
fileMd5Rename('E:\Project_python\WebDesign_py')
经验证txt文件的文件名已经使用文件内容的MD5值命名。如下:
给明天一个期许,加油!!