我可以通过对现有 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 哈希密码的安全性吗? 的相关文章

  • 日志锻造强化修复

    我正在使用 Fortify SCA 来查找我的应用程序中的安全问题 作为大学作业 我遇到了一些无法解决的 日志锻造 问题 基本上 我记录一些来自 Web 界面的用户输入的值 logger warn current id not valid
  • 使用内联样式有哪些风险?

    A 内容安全政策 https developer mozilla org en US docs Web HTTP CSP with a default src or style src指令将阻止内联样式应用于
  • 从 HTTPS 重定向到 HTTP 的安全问题?

    我在一些博客上读过 抱歉没有提及参考资料 但我找不到了 如果您将用户从 https 页面重定向到 http 页面 您将失去保护网站安全的所有工作 那么 有人可以向我解释一下在以下情况下我是对还是错 在登录页面上使用 https 然后使用 h
  • 对客户端 JavaScript 计算器使用 eval 安全吗?

    我正在制作一个计算器 作为用户浏览器的静态 HTML 页面 该页面并非旨在将任何信息提交回服务器 除了这个计算器之外 网页上不会出现任何其他内容 在这种情况下使用 eval 安全吗 或者换句话说 在这种情况下使用 eval 是否会导致额外的
  • 如何使用 .NET 以编程方式沙箱进程

    我计划设计一个系统 本质上允许用户在我的机器上运行 PHP Ruby 等脚本代码 我想将它们放入沙箱中 以防止它们访问机器的关键方面 哪些 NET API 可用于此目的 我计划从主流程创建一个子流程 并希望以编程方式从主流程中沙箱该子流程
  • 通过 URL 指定控制器类与为每个控制器编写一个脚本相比,有何优缺点?

    今年夏天我安装了两个不同的 PHP 系统 每个都使用两种不同的方法 方法 1 每个任务一个 PHP 文件 该方法需要一个PHP为每个主要任务创建文件 例如 我的上传脚本可以通过http www domain com upload php O
  • shell-out 值到 md5(加密)函数

    我正在寻找一种解决方案 我正在构建 JSON 记录 并需要在 JQ 中生成一些文本 但将此文本通过管道传输到 MD5 求和函数并将其用作键的值 echo first John last Big jq id first last md5 通过
  • 任何第三方都可以从我的项目加载嵌入式资源吗?

    请参考我的一篇之前的问题 https stackoverflow com questions 14681364 issues passing data from dll to application 我问的是如何从 DLL 加载已编译的资源
  • 数据加密

    存储大量信用卡信息的数据库是我们刚刚完成的系统中不可避免的一部分 不过 我想要的是卡号的最终安全性 我们可以设置一种加密和解密机制 但我们自己无法解密任何给定的号码 我所追求的是一种即使在数据库级别也能保护这些信息的方法 这样任何人都无法进
  • checkmarx - 如何解决存储的绝对路径遍历问题?

    Checkmarx v 9 3 0 HF11 我将 env 值作为 dev uat 服务器中使用的 docker 文件中的数据目录路径传递 ENV DATA app data 在本地 使用以下环境变量 数据 C 项目 应用程序 数据 get
  • .NET 中安全身份的本地化

    我想在 NET 中实现一个用于服务 客户端通信的命名管道 并遇到了这段代码 http code msdn microsoft com windowsdesktop CSNamedPipeCommunication 33b2485c view
  • Angular 2 将字符串转换为 md5 哈希

    我找到了ts md5 https www npmjs com package ts md5包 但在示例中它有一个hashStr方法 但现在不行了 类型上不存在属性 hashStr Md5 使用该错误后 该错误会记录在我的控制台中 我怎样才能
  • 如何通过 md5 比较图像?

    该方法是否比较图像的像素值 我猜它不会起作用 因为它们的尺寸彼此不同 但如果它们相同但格式不同怎么办 例如 我截图并保存为 jpg另一个并保存为 gif MD5哈希是实际的二进制数据 因此不同的格式将具有完全不同的二进制数据 因此 要使 M
  • “openssl 编程简介。”文章。过期的证书

    我是 openSSL 库和 PKI 的新手 我有一个简单的问题要问 openSSL 专家 有谁知道如何为本文中的代码示例创建证书 OpenSSL 编程简介 第一部分 第二部分 作者 Eric Rescorla www rtfm com op
  • 使用WordPress get_results()数据库函数是否可以防止sql注入

    似乎找不到答案 但想知道以下对数据库的查询是否容易受到 SQL 注入的攻击 searchPostResults wpdb gt get results querySearchVals OBJECT 这是使用的查询 global wpdb o
  • 我仍然认为在客户端哈希密码更好。我错了吗?

    我读过这些 https hackernoon com im harvesting credit card numbers and passwords from your site here s how 9a8cb347c5b5 https
  • exec()、shell_exec()、curl_exec() 的安全漏洞

    有时 我会使用 exec shell exec 和curl exec 以下是典型用途 假设其中有 PHP 变量 即第一个变量中的 html 用户有可能修改其内容 从安全漏洞的角度来看 我应该关注什么 escapeshellcmd 和 esc
  • 在 React 应用程序中使用 API 密钥

    我有一个使用两个第三方服务的 React 应用程序 该应用程序已开始使用react create app 这两项服务都需要 API 密钥 通过脚本标签提供一个密钥 如下所示 另一个 API 密钥在请求中使用 我将实际密钥存储在常量中并使用它
  • Java:BCrypt 的用途很好吗?

    我想知道我当前的 BCrypt 实现是否正确 我知道我没有使用BCrypt checkpw 这可能会导致问题 所以这是我在这里验证的主要原因 Hasher java容器类 abstract public class Hasher publi
  • 具有隐式授权的 OAuth 应用程序中的客户端模拟

    来自 OAuth 草案 隐式section https datatracker ietf org doc html draft ietf oauth v2 31 section 1 3 2 在隐式授权流程期间发出访问令牌时 授权服务器不对客

随机推荐