Python hashlib 为何同一字符常数输出Hash不同?
天蓬老师
天蓬老师 2017-04-17 17:12:24
0
2
794

在做网络安全相关的设计,用到Python hashlib。

Python代码如下:

import datetime import random import hashlib apikey = 'allankliu' salt = 'abcdefg' m = hashlib.md5() rand = random.randint(0,65535) for i in range(100): m.update('constant') print m.hexdigest()

发现只要使用m.update(string)方法后,每次打印的摘要都是不一样的。

11ac8edba2acc86348896c2f0f63a734 eb5d9f0db3d71555f3de11b1f5d20aaa 4e49fbbfdb17ecb08a1304b592d34148 5b0dec79c8a2155b0f27bf2cecc8adcc 3eb107bcf513ee333773eb4541e80d68 dc2e3a4e15dc5693bfaaa4ef1beaa564 fe8a08aa5e09181e8ed25a3c0a0b5c4d c601302c932e72eb7ca9103a354eca2b dd2aae804b473d330c039638d46ae5ce 4b644433898f64286f94cb165c5f3ae6 30e0a7d8659862a02f3da3d3da52b257 32a8c8c9dfd940ad748b4035aac04b72 b5fcfa5d5d90e8606c32787ef6d0205b c5a58a8f0ca444bb496a391b24170776

我原来理解是只要输入字符是一样的,输出Hash就应该一样。难道update()方法还会重新初始化?

粗粗看过hashlib.py源码,有些看不懂,找不到MD5的构造方法,不知为何引用到OpenSSL之类的。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous (2)
洪涛

m.update(a); m.update(b) is equivalent to m.update(a+b)

来自hashlib文档。

    洪涛

    allankliu的答案是对的,补充一点:这样设计的目的是为了解决大数据求值,将数据分成小块(或考虑数据来自网络,每取得数据的一部分就调用update),通过多次调用update计算得到最终的hash值。

      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!