2013-03-02 76 views
0

好吧,得到这个哈希生成器工作只是我想要的方式,除非它不正确生成哈希。我检查了一些从我的脚本生成的哈希到其他网站上发现的哈希,并且它们不匹配。它似乎是所有哈希值的问题,所以我认为它必须用hasher函数和data.encode(“utf8”)来做些什么。Python 3:哈希没有正确生成

+0

你有一些输入,给出了一个不匹配的例子,你怎么想的输出应根据在这些其他网站? – Marius 2013-03-02 03:27:04

+0

MD5 ||我的脚本dox = 8f9b83791d441749fc80644427efd4f5 ||其他网站dox = 171994ae268f7cd4f6eec68883d9c553 – user1451070 2013-03-02 03:28:56

+0

SHA1 ||我的脚本auw = f5384dcd6b5d04ba7f1aab13fe1e35fa953d2950其他网站auw = ec2ef255c2f871a7e5cc656a2cf34be344a8c3f0 – user1451070 2013-03-02 03:31:05

回答

2

按照documentation

hash.update(arg)

更新与该对象精氨酸,其 必须是可解释为字节缓冲器中的哈希对象。重复呼叫为 相当于单个呼叫与所有参数的连接:​​相当于m.update(a+b)

因此,您将所有组合连接在一起。

相反,你需要创建一个新的Hash对象每次hasher被称为:

Hashes = { 
    'MD5': hashlib.md5, 
    'SHA1': hashlib.sha1, 
    'SHA224': hashlib.sha224, 
    'SHA256': hashlib.sha256, 
    'SHA384': hashlib.sha384, 
    'SHA512': hashlib.sha512 
} 

... 

return Hash(data.encode("utf8")).hexdigest() 
+0

谢谢!阅读关于上下十次的文档,对于编码仍然是新的,所以这有点混乱,直到我做了一些Google搜索并且学习了连接的定义。 :) Thx再次。 – user1451070 2013-03-02 04:06:36

+0

很高兴帮助:)连接听起来令人困惑(和一些定义使它更令人困惑),但它非常简单,如“你好”+“世界!” ==“Hello World!”'。在你的例子中,你基本上调用了'Hash.update(“a”+“b”+“c”+“d”+ ...)'。 – grc 2013-03-02 04:15:59