当前位置: 首页 > 知识库问答 >
问题:

使用SHA-512和salt对MD5散列密码进行散列?

南门烈
2023-03-14

我正在研究一个已经用MD5(没有salt)散列用户密码的系统。我想使用SHA-512和SALT更安全地存储密码。

虽然这对于将来的密码来说很容易实现,但我也想修改现有的MD5散列密码,最好不强迫所有用户更改他们的密码。我的想法是只使用SHA-512和一个适当的salt来散列现有的MD5散列。然后,我可以在数据库中设置一些标志,指示哪些密码是从纯文本散列出来的,哪些密码是从MD5散列出来的。或者我可以在对用户进行身份验证时两者都试一下。或者甚至只是使用MD5和SHA-512/SALT对新密码进行哈希,这样就可以将它们与旧密码进行相同的处理。

在编程方面,我不认为这会是一个问题,但是我对加密/散列的了解还不够,不知道我对已经进行MD5散列的密码应用SHA-512/SALT散列是否会以任何方式损害散列的质量。我的第一本能是,如果有的话,它会更强,一个非常轻的键拉伸。

我的第二本能是,我并不真的知道自己在说什么,所以我最好得到建议。有什么想法吗?

共有1个答案

马胜泫
2023-03-14

使用加密基元组合函数是危险的,如果可以避免,则不应这样做。对于您的类型问题,常见的解决方案是在迁移期间保留两个哈希值,在可能的情况下使用新哈希值,并透明地升级旧密码(当您检查一个密码并且它匹配时,使用新算法重新哈希并存储它)

如果您有一个基于挑战-响应的方案,您无法看到明文密码,那么这就不起作用了,但是由于您似乎有一个存储的salt没有改变,所以我假设您的应用程序会进行散列。

 类似资料:
  • 作为练习,我用C编写了自己的SHA-512哈希函数实现。我知道它是有效的,因为我从abc 在Base64中。就像在测试现场一样。 我有两个问题: > 如何加密我的密码?如果我有: 我应该创建字符串以输入盐通过="ssssssssmy密钥密码"吗?或者可能以相反的方式?我试图在谷歌上到处寻找答案——我找不到真正合适的东西。 在base64中,我应该使用什么编码来获得像/etc/shadow文件中那样

  • 这些散列密码的方法中,哪一种最安全,最难发现散列冲突? 仅MD5 仅SHA1 通过SHA1MD5

  • 我正在使用以下代码创建哈希密码和salt: 我正在数据库中存储HashedPassword和Salt。 现在我要验证用户登录时的密码: 这不起作用,我得到了一个完全不同的哈希密码,而不是存储在数据库中的密码。据我所知,您应该在用户登录时输入的密码之前预置salt,然后运行相同的哈希密码函数。上面不是等价于那个吗?

  • 我想找到一个解决方案或方法,使我能够添加盐和控制迭代次数。本机Rfc2898DeriveBytes基于HMACSHA1。理想情况下,使用SHA-256或SHA-512将使系统经得起未来的考验。 这是迄今为止我发现的最好的例子:http://jmedved.com/2012/04/pbkdf2-with-sha-256-and-others/但是当我用SHA-256运行它时,它实际上比用SHA-51

  • 为什么他们不一样?我需要如何更改java版本以使其与Go版本完全相同?

  • 问题内容: 我在由.NET生成的数据库中存储SHA256用户密码哈希,我需要能够使用Node.js进行检查。唯一的问题是.NET和Node.js为相同的密码创建不同的哈希。 。净: Node.js(使用加密): 我找到了,但是无法弄清楚如何实施他的解决方案。 问题答案: 编辑:您正在C#中使用UTF-16,必须在两种语言中使用相同的编码: Node.js: C#: