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 output
和 Salt
。
在随后的登录尝试中,添加 user-entered password with the salt
并获取散列输出,然后将其与存储的散列值进行比较。如果该值匹配,则用户是合法的,否则不是。
我需要一些帮助来了解如何使用 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 output
和 Salt
。
在随后的登录尝试中,添加 user-entered password with the salt
并获取散列输出,然后将其与存储的散列值进行比较。如果该值匹配,则用户是合法的,否则不是。