Python 常用加密算法 base64, md5, sha1
892 views
0
Python 对字符串数据和文件数据进行MD5、SHA1、Base64哈希散列运算
Python 实现MD5加密
#!/usr/bin/env python # -*- coding:utf-8 -*- import hashlib m = hashlib.md5() # 创建md5对象 m.update('mimvp.com') # 生成加密串,其中password是要加密的字符串 print m.hexdigest() # 打印经过md5加密的字符串 输出结果:93161a376715ed7618796ecbd88d6fd1
示例代码:
文件名:hash.py
#!/usr/bin/env python # -*- coding:utf-8 -*- # copyright of mimvp.com import hashlib import base64 class YHash(object): @classmethod def get_md5(cls, data): md5 = hashlib.md5(data) return md5.hexdigest() @classmethod def get_sha1(cls, data): sha1 = hashlib.sha1(data) return sha1.hexdigest() @classmethod def get_base64(cls, data): b64 = base64.b64encode(data) return b64 @classmethod def get_file_hash(cls, filePath, hash_type='md5'): data_hash = '' data = '' with open(filePath, 'r') as f: data = f.read() if 'md5' == hash_type: md5 = hashlib.md5() md5.update(data) data_hash = md5.hexdigest() elif 'sha1' == hash_type: sha1 = hashlib.sha1() sha1.update(data) data_hash = sha1.hexdigest() elif 'base64' == hash_type: b64 = base64.b64encode(data) data_hash = b64 return data_hash if __name__ == '__main__': data = 'www.mimvp.com' print("str md5: %s, len: %d" % (YHash.get_md5(data), len(YHash.get_md5(data)))) print("str sha1: %s, len: %d" % (YHash.get_sha1(data), len(YHash.get_sha1(data)))) print("str base64: %s, len: %d" % (YHash.get_base64(data), len(YHash.get_base64(data)))) print("file md5: %s, len: %d" % (YHash.get_file_hash('hash_test.txt', hash_type='md5'), len(YHash.get_file_hash('hash_test.txt', hash_type='md5')))) print("file sha1: %s, len: %d" % (YHash.get_file_hash('hash_test.txt', hash_type='sha1'), len(YHash.get_file_hash('hash_test.txt', hash_type='sha1')))) print("file base64: %s, len: %d" % (YHash.get_file_hash('hash_test.txt', hash_type='base64'), len(YHash.get_file_hash('hash_test.txt', hash_type='base64'))))
运行结果:
str md5: 52c06085c45297325433e0c75b140565, len: 32 str sha1: 2f465e03a1f69f5cfe1a92b3a946e689866b1486, len: 40 str base64: d3d3Lm1pbXZwLmNvbQ==, len: 20 file md5: 2587912c3063fbe9232d9753a4405349, len: 32 file sha1: 48181e759a2a4d8a1e0ffea636d15c007b0cc1e6, len: 40 file base64: IyEvdXNyL2Jpbi9l................KSk=, len: 2512
使用Python进行文件Hash计算有两点必须要注意:
1、文件打开方式,一定要是二进制方式,即打开文件时使用b模式,否则Hash计算是基于文本的那将得到错误的文件Hash,网上看到有人说遇到Python的Hash计算错误在大多是由于这个原因造成的。实际经测试,发现文件打开方式"r"和"rb"的Hash值都是一样的(Ubuntu平台),为了确保万无一失,建议还是使用”rb“方式打开文件。
2、对于MD5如果需要16位(bytes)的值,那么调用对象的digest(),而hexdigest()默认是32位(bytes);同理Sha1的digest()和hexdigest()分别产生20位(bytes)和40位(bytes)的hash值
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-02-13 09:59:39
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!