• 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 import hashlib
    2 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 202cb962ac59075b964b07152d234b70
    2 900150983cd24fb0d6963f7d28e17f72

    对于中文,则进行转码:

     1 import hashlib
     2 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前要求进行编码转换,是因为同一个字符串在不同的编码体系下有不同的值,为确保不发生歧义必须要进行一次显性转换。

  • 相关阅读:
    「分块」学习笔记
    「NOIP 2017」逛公园
    大假期集训模拟赛15
    大假期集训模拟赛14
    大假期集训模拟赛13
    nginx 日志升级
    nginx 日志切割
    nginx 健康检查
    sftp 管理
    Prometheus 学习
  • 原文地址:https://www.cnblogs.com/Army-Knife/p/10689996.html
Copyright © 2020-2023  润新知