python哈希加密算法_Python 用hashlib。md5加密算法

廖雪峰的官方网站学习MD5加密,网址:“http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868328251266d86585fc9514536a638f06b41908d44000”

报“TypeError: Unicode-objects must be encoded before hashing”这种错误呢其实意思是在进行md5运算前,需要对数据进行编码。我运用的python版本与大佬的版本不符导致我出现了错误。出现这种错误推荐网址“http://blog.csdn.net/haungrui/article/details/6959340”

运行实例:

hashlib.md5(data)函数中,data参数的类型应该是bytes。也就是说我们在进行hash前必须把数据转换成bytes类型:

1 importhashlib2 m = hashlib.md5(b'123') #b代表bytes型

3 m0 = hashlib.md5(b'abc')4 mi =m.hexdigest()5 mi0 =m0.hexdigest()6 print(mi)7 print(mi0)

运行结果:

1 202cb962ac59075b964b07152d234b702 900150983cd24fb0d6963f7d28e17f72

对于中文,则进行转码:

1 importhashlib2 data='你好'

3 m = hashlib.md5(data.encode('gb2312'))4 mi =m.hexdigest()

---------------------------------------------------5 m0 = hashlib.md5(data.encode('utf8'))6 mi0 =m.hexdigest()7 print(mi)8 print(mi0)9 #运行结果如下(gb2312,utf8一样):

10 #39505368546302be2704b3d53b24203c

11 #39505368546302be2704b3d53b24203c

# 还可以试试这些编码:encode("mbcs")、encode("unicode_escape")

# 以及encode("raw_unicode_escape")

# -----数字时相同:

# c812727996fbf2201fa5ecc0acdccff0

# c812727996fbf2201fa5ecc0acdccff0

# -----英文时相同:

# 39505368546302be2704b3d53b24203c

# 39505368546302be2704b3d53b24203c

# -----中文时编码不同,结果不同:

# f69c425381d6d8936733c6737f7d5a68

# 0342b5aff1e19bfaaa604e265278e317

# -----中英结合,中数结合以及中英数三者结合,结果都不同(只有有中文,就不同):

# 54f836634530a76a2c06e49123f06f1c

# 3dd056aefd606c44abc9d178e0c1170a

为什么不能直接hashlib.md5(data),非要强制进行编码转换,设计者的初衷何在?中文字符在Python中是以什么形式存在?

1 print('%x'%ord(data[0]))2 4f60

中文字符在Python中是以unicode存在的。至此,所有的疑问都得以解除了。

在hash前要求进行编码转换,是因为同一个字符串在不同的编码体系下有不同的值,为确保不发生歧义必须要进行一次显性转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值