SHA256 / SHA512:MySQL 密码散列和加盐代码

SHA256 / SHA512: MySQL Code for Password Hashing and Salting

我需要一些帮助来了解如何使用 SHA256 或 SHA512 为 SQL 中的用户散列和加盐密码。我认为我必须为每个用户生成不同的盐?如何在 MySQL 中检查登录密码和更新现有密码?

我使用此资源对实现进行了一些研究,但它只显示了 Java 代码,我如何在 MySQL 中执行此操作?这会在存储过程中完成吗?

谢谢

我在安全方面没有权威,但使用 SQL 服务器你可以按以下方式处理不同的部分:

For Hashing:

您可以根据需要使用 [HASHBYTES] 和任一 SHA-2 算法。 HASHBYTES('SHA2_256', @Password); 请注意,此函数仅占用 8000 个字节,并且适用于 varchar、nvarchar 或 varbinary,这在您的情况下应该足够了,但以防万一。

如果输入约束不适合您,您还可以在 .NET 中编写 SQL CLR 函数来执行散列。

For the Salt:

使用 GUIDs ,使用部分 GUID 可能无法为您提供盐所需的熵,因此我建议使用整个字符串。

或使用 RANDOM() 函数生成具有逻辑位的唯一字母数字字符串。

Process:

在散列 (HASHBYTES('SHA2_256', @Password + Salt); 之前将 Salt 添加到 Password 并在注册过程中为用户存储 Hashed outputSalt

在随后的登录尝试中,添加 user-entered password with the salt 并获取散列输出,然后将其与存储的散列值进行比较。如果该值匹配,则用户是合法的,否则不是。