2011-02-27 75 views
-1

我提出了一个关于内置python哈希函数的主题:Old python hashing done left to right - why is it bad? 上一个主题是关于为什么它不好加密,因为我们有一个名为Gruyere的应用程序,里面充满了安全漏洞,它使用hash()来加密cookie。在Python中利用哈希函数

# global cookie_secret; only use positive hash values 
h_data = str(hash(cookie_secret + c_data) & 0x7FFFFFF) 

c_data是一个用户名; cookie_secret是salt(默认为'''')

我已经实现了一个更安全的加密方法,使用md5哈希与盐,但一个练习是击败这个旧的加密,我仍然不明白如何:-(我'已经阅读了python源代码中的string_hash代码,但它没有记录,我不知道它。

编辑:这个想法是写一个程序,可以创建一个有效的cookie任何有效的用户,所以我想我需要找出cookie_secret以某种方式

+0

@caf已经在你的上一个问题中回答了这个问题。 – 2011-02-27 16:15:13

+0

可能的重复[旧的Python哈希完成从左到右 - 为什么它不好?](http://stackoverflow.com/questions/5128990/old-python-hashing-done-left-to-right-why-is-它不好) – 2011-02-27 21:04:45

回答

0

Zack在你的最后一个问题中已经描述了答案:很容易找到碰撞

假设你在数据库中保存了hash("pwd")(你实际上做了一些不同的事情并不重要。现在,如果您在网站中输入"pwd",则可以输入。但是如何检查?同样,"pwd"的散列是标记,并与数据库中的值进行比较。但是如果有第二个字符串,例如"hello"hash("hello") == hash("pwd")呢?那么你也可以使用"hello"作为密码。所以要打破加密,你不需要找到“pwd”,你只需要任何具有相同散列值的字符串。你可以只搜索这样一个字符串蛮力(我猜你可以根据hash的来源知识做一些优化)

+0

这只是描述你如何使用碰撞,但不是你如何利用这个特定的哈希函数的特性。 – delnan 2011-02-27 14:56:17

+0

这个想法是编写一个程序,可以创建一个有效的cookie任何有效的用户,所以我想我需要找出cookie_secret莫名其妙? – KaiserJohaan 2011-02-27 15:04:10

+0

我还没有详细研究散列函数,但是如果你例如得到“a__”“b__”“c__”和“__a”“__b”“__c”的散列,似乎很有可能搜索到一个碰撞。虽然没有帮助你的细节。祝你好运! – markijbema 2011-02-27 18:22:55