我正在尝试了解有关密码哈希的更多信息。我很习惯java,我正在尝试编写自己的哈希函数来获取密码。我知道你永远不应该实施自己的密码安全,这纯粹是一项学术努力。我已经自己实现了HashMap和其他数据结构。如果需要,我将非常感谢哈希如何工作和代码片段的描述。我搜索了一个答案,但我能找到的是如何使用SHA 256(或其他)来散列密码。我想自己去了解有关算法的更多信息。感谢您的帮助。
P.S。 为了澄清,我知道有些算法可以在java中导入哈希密码。我正在寻找这些函数如何工作以及如何与hashMap类似的描述,以便我可以尝试复制它。
答案 0 :(得分:2)
这是一个非常广泛的问题,但希望一些高级细节可以帮助您。
首先,正如您所说,您通常不应该自己实现安全散列函数,因为它很容易出错,从而导致安全漏洞。
加密散列(例如SHA-2中提供的各种位强度)是将输入字节转换为指定长度的输出的单向加密过程。假设算法正确,则无法将此输出直接转换回输入。
有关SHA-2算法的具体讨论,您可以从维基百科页面开始:https://en.wikipedia.org/wiki/SHA-2
为了设计自己的算法,您需要考虑以下注意事项(如SHA-2和其他哈希算法所做的那样,摘自维基百科):
此外,特别是密码散列:
最后,在哈希算法本身之外,确保密码哈希值已被腌制很重要。这里的Salt指的是在散列之前修改密码(例如通过为其添加前缀),其中随机生成的salt值也与散列一起存储。这样可以防止密码哈希的现有密码或单个字典被用于数据库中的所有哈希值(如果它会被攻击者强制攻击者单独攻击每个哈希)。