java - 用盐使哈希更安全
问题描述
我是新来的,所以请纠正我的任何问题!
我被指派做一个基本的 java 程序,我在其中注册和验证用户,将用户名和密码存储在 .txt 文件中。密码存储为 MD5 哈希。另外,我需要制作另一个程序来尝试暴力破解 .txt 文件以查找密码,并测量这样做所需的时间。
我设法做到了(有点痛苦),最后一步是找到并实施一种方法来减少这种暴力破解工作的机会。我搜索了很多关于它的内容,除了人们说要使用另一种更安全的密码存储方法之外,我发现唯一有用的东西(我之前听说过,所以我搜索了它)是使用盐,我知道它们是串联的在哈希之前的密码中,然后将哈希和盐都存储起来。
但我不认为这在这种情况下会起作用,因为盐也将存储在 .txt 文件中,因此,即使由于可能的组合范围更大而需要更长的时间,我仍然可以在尝试组合时进行蛮力并将 .txt 中的盐添加到其中,然后对其进行散列并与 .txt 中存储的散列进行比较。
这是一种使蛮力更难的可行方法(至少在这个作业中,为了学习目的),因为它需要更多时间,还是有其他方法可以做到这一点?提前致谢!
解决方案
首先。md5-Hash 已弃用。请改用 sha256 或 sha512。
盐不应存储在文本文件中。它是您程序的配置参数。
现在,您可以使用您的秘密盐和密码来生成哈希。
hashedPw = sha256(salt + password)
这避免了攻击者可以通过在查找表中查找来检索原始密码。( https://crackstation.net/ )
此外,您可以使用 AES 算法加密您的密码。
推荐阅读
- django - 需要根据电子邮件搜索用户,然后停用他的个人资料
- apache-nifi - 如何在 IDE 和 Build 中获取 NiFi UI 代码,因为那里与其他模块紧密耦合
- typescript - 在打字稿的声明文件中增加命名空间
- angular - 获取嵌套在另一个 div 中的 div 元素的值,即 `chart` 以使其在关闭时未定义
- apache-spark - 在 Spark 的 Google Cloud Storage 连接器中更改存储桶类(区域/多区域)
- r - 用 R (-2x + y = 0) 绘制两个变量
- swift - NSSearchField TextDidChange 的方法是什么?
- python - 如何在 python 中评估类级别的属性值?
- c# - TCP/IP 数据传输在传输数据时冻结 Unity
- r - 情节没有出现在闪亮