在Python中为散列函数实现我自己的哈希算法

2024-10-01 05:06:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个社交网络的用户登录和帐户创建建模,并且必须使用我自己的哈希算法创建一个哈希函数(不使用hashlib)。它的关键是获取一个密码并对其进行哈希处理,使其成为一个由字母和数字组成的随机字符串。当密码中只有一个字母被更改时,哈希密码也会发生显著变化。例如,如果“heyguys”变成7h8362,“hayguys”就会变成完全不同的东西,比如“bbb362”。输入字符串中的一个小变化应该会导致输出字符串的大变化。我这样做的原因是因为我将用户数据存储在字典中,以明文形式存储密码是很危险的。在

我该怎么做呢?我是一个初学者,知道hashlib,但除此之外,我似乎不知道从哪里开始。在


Tags: 函数字符串用户网络算法密码字母数字
1条回答
网友
1楼 · 发布于 2024-10-01 05:06:04

正如其他人在这里所说的,这是一个高级主题,除非您知道自己在做什么,否则不应该尝试创建一个可行的哈希函数。在

但是,如果你想了解散列的基础知识,这里有一些事情需要考虑。在

  1. 等效输出:在每个哈希函数中,您应该能够为每个彼此相同的输入获得相同的输出,这样,每次调用hash(8)时,hash(8) = 'y758tff'应该是'y758tff'

  2. 避免冲突:好的哈希函数为尽可能多的输入提供唯一的输出。意思是,Hash(n)和{}不应该给出相同的散列输出,如果必须这样,它应该非常罕见。

  3. 不可逆性:一个好的哈希函数,将几乎不可能反转回它的键。意思是,对于每一个Hash(n) = N,不应该有这样的函数{}。举个例子,如果你有一个简单地反转输入的散列函数,那么就很容易创建一个反转哈希输出的函数。

  4. 相同长度的键:不管一个好的哈希函数的输入长度如何,输出的长度必须与所有输入的长度相同。这样,Hash('a') = '46fhur78',和{},两者的长度都是8。

相关问题 更多 >