Python使用标准库hashlib来实现MD5加解密。方法有: 1. Updata 传输数据; 2、使用hexdigest进行十六进制转换;
<br />
update(arg)<br />
传入arg对象来更新hash的对象。必须注意的是,该方法只接受byte类型,否则会报错。这就是要在参数前添加b来转换类型的原因。
同时需要注意的是,重复调用update(arg)方法会拼接传入的arg参数,而不是覆盖。即 m.update(a); m.update(b) 等价于 m.update(a+b)。
<br />
hexdigest()<br />
在英语中hex有十六进制的意思,因此该方法是将hash中的数据转换成数据,其中只包含十六进制的数字。
>>> import hashlib
>>> m = hashlib.md5()
>>> m.update(b'123')
>>> m.hexdigest()
'202cb962ac59075b964b07152d234b70'
# 或者可以这样(最常见的写法,常用于图片的命名)
>>> hashlib.md5(b'123').hexdigest()
'202cb962ac59075b964b07152d234b70'
# 也可以使用hash.new()这个一般方法,hashlib.new(name[, data]),name传入的是哈希加密算法的名称,如md5
>>> hashlib.new('md5', b'123').hexdigest()
'202cb962ac59075b964b07152d234b70'
以上是英文的md5加密。如果你想加密中文,你会发现如果按照上面的写法会报错。原因是字符转码的问题。你应该这样写:
>>> import hashlib
>>> data = '你好'
>>> hashlib.md5(data.encode(encoding='UTF-8')).hexdigest()
'7eca689f0d3389d9dea66ae112e5cfd7'
此处先将数据转换成UTF-8格式的,使用网上工具对比下加密的结果,发现有的md5加密工具并不是使用UTF-8格式加密的。
经测试目前发现可以转为UTF-8、GBK、GB2312、GB18030,不分大小写(因为GBK/GB2312/GB18030均是针对汉字的编码,所以md5加密后结果一样)。
例如:
>>> hashlib.md5('你好'.encode(encoding='UTF-8')).hexdigest()
'7eca689f0d3389d9dea66ae112e5cfd7'
>>> hashlib.md5('你好'.encode(encoding='GBK')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'
>>> hashlib.md5('你好'.encode(encoding='GB2312')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'
>>> hashlib.md5('你好'.encode(encoding='GB18030')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何在python中逐行读取01/08
- ♥ 如何在mac上使用python09/07
- ♥ python如何创建mysql数据库连接10/23
- ♥ python中的open函数是如何编码的?10/22
- ♥ 为什么我不能在终端中运行 python?09/16
- ♥ 如何用python3顺序执行多个py文件?10/21
内容反馈