gpt4 book ai didi

java - 自己实现的哈希

转载 作者:行者123 更新时间:2023-12-02 02:30:16 24 4
gpt4 key购买 nike

我正在尝试了解有关密码哈希的更多信息。我非常习惯java,并且正在尝试编写自己的密码哈希函数。我知道您永远不应该实现自己的密码安全,这纯粹是一项学术努力。我已经实现了 HashMap 和其他数据结构。如果需要的话,我希望能够描述哈希的工作原理和代码片段。我已经搜索了答案,但我能找到的只是如何使用 SHA 256 (或其他)来哈希密码。我想自己做一个来了解更多关于算法的知识。感谢您提供的所有帮助。

附:为了澄清一下,我知道你可以在java中导入一些算法来哈希密码。我正在寻找这些函数如何工作以及它们与 hashMap 有何相似之处的描述,以便我可以尝试复制它。

最佳答案

这是一个非常广泛的问题,但希望一些高级细节能够帮助您。

首先,正如您所说,您通常不应该自己实现安全哈希函数,因为它很容易犯错误,从而导致安全漏洞。

加密哈希(例如 SHA-2 中以各种位强度提供的加密哈希)是一种将输入字节转换为指定长度的输出的单向加密过程。假设算法正确,该输出无法直接转换回输入。

有关 SHA-2 算法的具体讨论,您可以从维基百科页面开始:https://en.wikipedia.org/wiki/SHA-2

为了设计自己的算法,您需要考虑以下注意事项(如 SHA-2 和其他哈希算法一样,摘自维基百科):

  • 它是确定性的,因此相同的消息总是会产生相同的哈希值
  • 可以快速计算任何给定消息的哈希值
  • 除非尝试所有可能的消息,否则无法从其哈希值生成消息
  • 对消息的一个小改动就会极大地改变哈希值,以至于新的哈希值看起来与旧的哈希值不相关
  • 不可能找到具有相同哈希值的两条不同消息

此外,特别是对于密码哈希:

  • 与上述“快速”考虑相反,密码哈希算法通常选择更慢且更难以在硬件(例如 scrypt)中实现的算法,以便在哈希值和盐值已知时降低暴力破解密码的能力。通常,这是通过执行 1000 多轮 SHA-2 来完成的。

最后,除了哈希算法本身之外,确保密码哈希经过加盐处理也很重要。这里的盐是指在使用随机生成的盐值进行哈希处理之前修改密码(例如,通过添加前缀),该盐值也与哈希一起存储。这可以防止现有的或单个密码哈希字典被用于攻击数据库中的所有哈希(即,它迫使攻击者单独攻击每个哈希)。

关于java - 自己实现的哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47232212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com