我正在为社交网络的用户登录和帐户创建建模,并且必须使用我自己的哈希算法创建哈希函数(不使用hashlib)。它的关键是取一个密码并对其进行散列,使其成为随机的字母和数字字符串。当只更改密码的一个字母时,散列密码也会发生显着变化。例如,如果“heyguys”转到7h8362,那么“hayguys”会变成完全不同的东西,比如“bbb362”。输入字符串的微小变化应导致输出字符串发生较大变化。我这样做的原因是因为我将用户数据存储在字典中,以明文形式存储密码是危险的。
我该怎么做呢?我是初学者并且知道hashlib,但除此之外,我似乎无法弄清楚从哪里开始。
答案 0 :(得分:0)
正如其他人在这里所说,这是一个高级主题,除非你知道自己在做什么,否则你不应该尝试制作一个可行的Hash函数。
但是,如果您想了解散列的基础知识,可以考虑以下几点。
等效输出:在每个Hash函数中,您应该能够为每个彼此相同的输入获得相同的输出,这样每次hash(8) = 'y758tff'
都应该是'y758tff'
hash(8)
被称为。{/ p>
避免碰撞:良好的散列函数为尽可能多的输入提供唯一的输出。含义Hash(n)
和Hash(x)
不应该提供相同的哈希输出,如果必须发生,则应该非常罕见。
不可逆性:良好的哈希函数几乎不可能反转回其键。意思是,对于每个Hash(n) = N
,应该没有函数,以便function(N) = n
。举个例子,如果你有一个简单地反转输入的哈希函数,那么很容易创建一个反转哈希输出的函数。
相同长度的密钥:无论良好散列函数的输入长度如何,输出必须与所有输入的长度相同。这样,Hash('a') = '46fhur78'
和Hash('Tomatoes') = 'yfih78rr'
,长度均为8.