利用Python中的哈希函数
我之前发了个话题,讨论了Python内置的哈希函数:旧版Python的哈希是从左到右进行的,这有什么不好呢?这个话题主要是讲为什么这种方式在加密上不好,因为我们有一个叫Gruyere的应用,它有很多安全漏洞,并且使用hash()来加密cookies。
# global cookie_secret; only use positive hash values
h_data = str(hash(cookie_secret + c_data) & 0x7FFFFFF)
c_data是用户名;cookie_secret是盐(默认情况下就是'')
我已经用md5哈希和盐实现了一种更安全的加密方法,但有个练习是要打败这种旧的加密方式,我还是搞不懂怎么做 :-( 我看了Python源代码里的string_hash代码,但没有文档说明,我也搞不明白。
补充:我的想法是写一个程序,可以为任何有效用户创建一个有效的cookie,所以我想我需要想办法找到cookie_secret。
1 个回答
0
Zack在你上一个问题中已经描述了答案:找到一个碰撞是很简单的。
假设你把 hash("pwd")
存储在数据库里(其实你做的事情可能不一样,这个不重要)。现在,如果你在网站上输入 "pwd"
,你就能登录。但是,这个是怎么检查的呢?再次说,"pwd"
的哈希值会被计算出来,然后和数据库里的值进行比较。但是,如果有第二个字符串,比如 "hello"
,并且 hash("hello") == hash("pwd")
,那你也可以用 "hello"
作为密码。所以,要破解这个加密,你不需要找到 "pwd",你只需要找到任何一个哈希值相同的字符串就行。你可以通过暴力破解的方式去寻找这样的字符串(我想你也可以根据 hash
的来源做一些优化)。