我可以通过对现有 MD5 哈希加盐并使用 Scrypt 或 PBKDF2 HMACSHA256 对结果进行哈希来提高 MD5 哈希密码的安全性吗?

2024-01-11

我有一个使用 MD5 进行加盐和散列处理的旧密码数据库。我想更新系统以使数据更安全。

第一个选项是在用户登录时将用户转换为新的哈希方案(Salt + Scrypt 或 PBKDF2 HMACSHA256),并在一段时间后停用旧用户,因此他们必须使用密码恢复功能,该功能会自动更新其哈希值。

允许我立即升级每个人的另一个选择是采用现有的 MD5 哈希值,为每个哈希值添加新的随机盐值,然后使用新的哈希方案(Salt + Scrypt 或 PBKDF2 HMACSHA256)对结果进行哈希处理并存储该值到数据库并删除旧值。

然后,当用户登录时,我必须应用旧方法,然后应用新方法。我更喜欢第二个选项,因为它允许我尽早从数据库中删除所有旧的不安全哈希值。

对现有哈希进行加盐和重新哈希是否安全? MD5 是否已损坏,以至于我可以运行脚本来对密码进行反哈希处理并使用新方案重新哈希它们?

或者也许最好的解决方案是结合使用这两种选项?这样我就不必让数据库中现有的 MD5 哈希值处于不安全状态,并且我可以将用户迁移到新系统一段时间?


MD5 并没有那么糟糕,您可以轻松地对所有密码进行哈希处理,但假设密码的质量不太好,那么您可能会暴力破解它们并将它们转换为新的、更安全的格式。 MD5 的缺陷是由于它的长度相对较小(更多的碰撞面)和计算简单(这意味着暴力攻击比具有较大运行时复杂度的算法(例如 SHA2)更可行)

如果我是你,我会执行你列出的两种方法(因为正如你所提到的,快速转移密码非常重要,以防你的数据库被黑客入侵)。首先,我会暴力破解所有暴力 MD5 密码并将它们转换为新格式。我过去曾这样做过,到目前为止最好的结果是使用HashCat http://hashcat.net/oclhashcat-plus/(最好是 Cuda 或 OCL 风格,因为它们使用 GPU 并且速度快 200 倍)。如果 Hashcat 太难(学习曲线可能很陡),那么尝试。它比 HashCat 慢很多,但是更容易使用。

对于无法破解的密码,请使用户帐户过期并让他们重置密码。或者,为了更好地对待您的用户,只需在用户下次登录时通过发送两个哈希值将数据库中的密码更新为新格式即可。如果 MD5 校验通过,则销毁它并用新格式替换它。这些只是一些想法。

EDIT:

忘记提及的是,如果您只想将 MD5 密码散列为新格式,这在安全性方面就很好,尽管它为您的代码增加了另一层复杂性,并且在复杂性存在的地方就存在实现缺陷的空间。只是需要思考一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以通过对现有 MD5 哈希加盐并使用 Scrypt 或 PBKDF2 HMACSHA256 对结果进行哈希来提高 MD5 哈希密码的安全性吗? 的相关文章

  • 内容安全策略:页面设置阻止自行加载资源?

    我有基于 Java 的 Web 应用程序运行在Tomcat http en wikipedia org wiki Apache Tomcat6 我的应用程序在本地主机和端口 9001 上运行 为了使我的应用程序更加安全并降低风险XSS ht
  • Java 7 中新的 JNLP 缺少项目警告是怎么回事?

    从 Java 6 切换到 Java 7 后 我的 JNLP 仍然工作正常 但它现在抛出一系列如下错误 Missing Application Name manifest attribute for http blah com app jar
  • Hapijs 在一个连接上同时使用 Http 和 Https

    New to Hapijs http hapijs com 并尝试使用它来创建一个应用程序 该应用程序对所有请求使用 HTTPS 并将 HTTP 重定向到安全连接 问题是应用程序进入 HTTPS 模式没有问题 但如果我将 URL 更改为 H
  • 如何防止我的 servlet 被其他网站调用

    好的 我有一个像这样的简单的 servlet public class SimpleServlet extends HttpServlet public void doPost HttpServletRequest req HttpServ
  • 如何使用 php 命令使注册表单高度安全?

    我想让代码对用户来说真正安全 下面的代码显示了 php 代码 我已将其用于我的网站 现在我已经使用了一些验证 例如密码和重复密码必须匹配 并且用户必须输入所有字段 为了使其更安全 我想插入安全命令 例如 PDO mysqli crypto
  • 解密Javascript源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我已经编写了一段 JavaScrip
  • 使用 authlogic_api 进行 Rails REST API 访问

    我正在为 Steam 游戏编写 Rails 后端 API 该游戏只能通过 REST 调用访问 因此不需要特定于用户的身份验证 我正在努力实施authlogic api 插件 http github com phurni authlogic
  • CORS 到底如何提高安全性[重复]

    这个问题在这里已经有答案了 我确切地知道 CORS 是如何工作的 我知道它是在浏览器上实现的 并且我知道它禁止向其他来源发送 XMLHTTPRequest 除非远程来源允许它使用响应标头 Access Control Allow Origi
  • Symfony 2 SecurityContext 类已弃用

    当我尝试访问 symfony demo 上的 app example 时 出现以下错误 错误 Symfony Component Security Core SecurityContext 类是 自 2 6 版本起已弃用 并将在 3 0 中
  • 数据库文件和 ASP.NET 登录控件

    我正在尝试 ASP NET 登录控制教程 一切正常 但是 我不知道如何让登录控件使用我自己的数据库 SQL Server 2005 而不是使用它的 mdf 文件 我也不知道这个文件是从哪里创建的 因为它根本没有出现在我的解决方案中 如果我能
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • 最好的通用摘要函数?

    在 2009 年编写一个普通的新应用程序时 就安全性和性能而言 最合理的摘要函数是什么 随着情况的变化 我如何在未来确定这一点 When similar https stackoverflow com questions 116684 wh
  • 如何安全地存储和处理 JWT 密钥

    读完这篇文章后 JWT 什么是好的密钥 以及如何将其存储在 Node js Express 应用程序中 https stackoverflow com questions 30089604 jwt whats a good secret k
  • Ruby 的 OpenSSL::Random 种子是否足够?

    我对 Ruby 知之甚少 所以如果答案很明显 请原谅我 我注意到在http www ruby doc org stdlib 1 9 3 libdoc securerandom rdoc SecureRandom html http www
  • 油猴安全性如何?

    我从未真正使用过greasemonkey 但我正在考虑使用它 考虑到 GreaseMonkey 允许您让互联网上的随机人改变您喜爱的网站的行为 它的安全性如何 他们可以窃取我的密码吗 看看我的私人数据 做我不想做的事吗 油猴安全性如何 Th
  • 此 JavaScript 如何在 Firefox 中打开 Windows 设置?

    新安装 Firefox 45 开发版后 我看到了这个页面 它有一个按钮 让我们开始吧 单击该按钮时 会以某种方式打开选择默认应用程序Windows 10 中的设置页面 这是怎么做到的 我无法通过开发者控制台在该页面上迷宫般的代码中找到任何内
  • 使用鼠标检测的反验证码

    我想知道是否可以为仅使用 javascript 的表单创建一个安全的人体检测机制 不使用验证码 来检测鼠标移动 因为 jquery 或操作系统代码都可以移动鼠标 我是这么告诉的 这是我的计划 使用 jQuery 我可以检测鼠标是否已移动 然
  • 评估 CRC-32 实现中的差异

    我见过相同基本 CRC 32 算法的许多不同实现 如下所示 int remain int sbox SIZESBOX int dividend int bit for dividend 0 dividend lt SIZESBOX divi
  • Android - 在sqlite数据库中存储敏感数据

    我需要将敏感数据存储在 Android 应用程序的 sqlite 数据库中 我如何确定这些数据非常安全 我知道我可以使用密钥加密数据 但是我将该密钥存储在哪里 我也不想要求用户填写密钥 我只是希望它能够自行工作 因为我害怕逆向工程 所以我也
  • 我必须使用什么加密程序来通过 HTTP 协议发送加密的“电子邮件”和“密码”值?

    我正在使用 Ruby on Rails 3 我想通过 HTTP 协议发送 电子邮件 和 密码 值 我知道 我不应该 但我需要 我需要从发送用户凭据我的客户申请到一个我的服务应用 我可以使用公共和私人RSA密钥来实现这一点 但如果是这样 我不

随机推荐