想要将网站密码加密从SHA1转换为SHA256

时间:2011-08-07 07:15:23

标签: sha1 sha256

只是寻找一些建议。 我有一个拥有大约2500名用户的网站 - 规模虽小但正在增长。 我在密码上使用SHA1加密来构建它。 我已经读过SHA1是不安全的,想改为用盐说SHA256。

有没有人对如何进行这样的转换有任何建议? 如果我可以解密密码并重新哈希它们会很好,但它似乎没有能力。

THX 亚当

4 个答案:

答案 0 :(得分:11)

通常的解决方法是:

  1. 使哈希密码列更大以容纳sha256哈希,并添加“盐”列
  2. 最初将salt字段设置为NULL,并调整密码检查代码,以便NULL salt表示sha1,非NULL表示sha256
  3. 一旦sha1-use成功登录,请使用salt将密码重新哈希到sha256,然后更新数据库。
  4. 随着时间的推移,用户将自己迁移到sha256;唯一的问题是用户只是偶尔登录或根本不登录。对于这些,您可能希望发送提醒电子邮件,或者甚至威胁要关闭他们的帐户如果他们在第X天之前没有登录(尽管不提供实际原因......)

答案 1 :(得分:7)

为了澄清,SHA是一种散列算法,它(通常)是一条单行道。您无法解密哈希,这是使用它们验证密码的强度。你正在走向正确的轨道,转向盐渍哈希,这就是我将如何做到的。

获取密码的唯一方法是让用户自己输入密码。当用户访问您的站点并登录时,请逐个更新密码。在您的身份验证方法中,我将执行您现在正在执行的哈希,并将其与现有字段中的内容进行比较(此处没有任何新内容)。假设它匹配,继续使用SHA256进行salt / re-hash,并更新数据库中的密码字段。如果需要,请在您的用户表中跟踪哪些用户已更新。

我做了很多假设,但这就是我过去解决哈希算法舞蹈的方法。祝你好运!

答案 2 :(得分:1)

我还有另一个建议是立即将密码哈希值从SHA1迁移到SHA256,而无需等待用户再次访问该站点以重新密码。更改将是一次性密码哈希迁移并更改为您的登录验证功能。

假设您的密码哈希是使用以下函数生成的:password + salt [Sha1] - >散列-SHA1

要迁移到Sha256,您可以使用以下算法转换密码哈希:

Hash-sha1 + salt [Sha256] - > Hash-sha256(盐用于增加输入的复杂性。)

根据sha256函数的可接受值,您可以考虑将Hash-sha1编码为base64以用于可打印的ascii。

对于登录验证功能,应使用以下算法对密码进行哈希处理:

密码+盐[sha1] - > hash-sha1 + salt [sha 256] - >散列-SHA256

缺点是哈希两次(使用一些CPU时间),但简化了迁移和更好的安全性。

答案 3 :(得分:1)

切换到SHA256几乎不会让您的网站更安全。

SHA1和SH512是消息摘要,它们从不意味着是密码哈希(或密钥派生)功能。 (尽管消息摘要可以用作KDF的构建块,例如在带有HMAC-SHA1的PBKDF2中。)

密码散列函数应该防止字典攻击和彩虹表。

目前,唯一的标准(如NIST批准的)密码散列或密钥派生功能是PBKDF2。如果不需要使用标准,更好的选择是bcrypt和更新的scrypt。维基百科有所有三个功能的页面:

https://crackstation.net/hashing-security.htm页面包含对密码安全性的广泛讨论。

话虽如此,tdhammers就如何处理迁移提供了很好的建议。