mysql - 如何对mysql数据库进行哈希和加盐密码
问题描述
我已经看到很多关于散列和加盐密码的主题,然后将它们与 MySQL 数据库中的散列和加盐进行比较,但是它们都没有真正帮助。
它们要么真的“模糊”,要么没有使用正确的编码语言。
我正在用 Visual Basic 编码。
因此,我使用了一个名为“MyBB”的论坛软件,它将用户的密码加密为 MD5 哈希,并在其旁边生成一个盐。
我已经成功连接到 MySQL 数据库,并且可以使用用户名登录我的应用程序,但是因为我还没有对密码进行哈希处理并将其加盐然后比较两者..我无法使用我的原始登录密码 - 相反,我必须使用数据库中的 MD5 哈希密码。
我的问题是:如何对密码进行哈希处理,然后对其进行加盐,然后将两者进行比较,以便我能够使用原始密码登录,而无需使用数据库中的 MD5 哈希?
任何帮助,将不胜感激。
我已经搜索并阅读了许多主题,但是没有一个提供如何做到这一点。它简要提到您需要对其进行哈希处理并对密码进行加盐,然后比较两者,但是它没有提供任何代码或如何操作的步骤。在 Visual basic 中也很少有关于这样做的主题。它们中的大多数用于 php 和 c#,当您不主要使用这些语言进行编码时,这将无济于事。
解决方案
散列和加盐在 1990 年代已经过时了,而 MD5 通常是散列的糟糕选择,尤其是密码,你永远不应该使用它。
推荐的方法是使用password_hash
正确散列密码,并password_verify
验证它们。
默认情况下,这两者都使用Bcrypt,这是一种很难破解的特定于密码的哈希。
您可以在 PHP 和其他语言中使用 Bcrypt,它是一个定义良好的标准,同样受到 .Net 应用程序的支持。MD5,即使是“加盐”,也完全不够用,需要立即更换。
我强烈建议您尽快切换到基于 Bcrypt 的密码,并将所有用户从 MD5 迁移到 Bcrypt。如果您知道 MD5 哈希匹配,则每次他们登录时,您都可以更新密码字段。
有关 MD5 完全无用的示例,请搜索73868cb1848a216984dca1b6b0ee37bc
.
推荐阅读
- kotlin - 带有接收器的函数的 Kotlin 扩展函数
- javascript - 在 Draft-js 中,当用户光标/选择位于该实体内时,如何将类应用于实体以突出显示它?
- rest - 在 CRNK 中过滤双向关系
- c# - 如何从外部 REST Web 服务获取记录
- amazon-web-services - Amazon Web Services 缺少实例
- django - Django通过url参数过滤列表视图不起作用
- asp.net-core - 使用 MVC/端点路由重写 URL
- jinja2 - 使用 Jinja 的 Sphinx Rtd 主题覆盖页脚
- sql-server - 选择哪个返回多个值不能按预期工作
- python - 在Qgrid中,有没有办法在显示表格时应用默认行过滤器