利用Python中的哈希函数

0 投票
1 回答
2354 浏览
提问于 2025-04-16 12:37

我之前发了个话题,讨论了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 的来源做一些优化)。

撰写回答