python:MD5加密实现详解及文件名以其MD5值命名

版权声明:转载请标明出处 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值命名。如下:
文件用其MD5值命名

给明天一个期许,加油!!

猜你喜欢

转载自blog.csdn.net/w1418899532/article/details/84203632