我需要一些帮助来了解如何使用SHA256或SHA512为SQL中的用户散列和加密密码。我想每个用户我都要生成不同的盐?如何在登录和更新时检查密码以及MySQL中的现有密码?
我用这个资源做了一些关于实现的研究,但它只显示了Java代码,我该如何在MySQL中做到这一点?这会在存储过程中完成吗?
由于
答案 0 :(得分:0)
我对安全方面没有权限,但是使用SQL Server可以通过以下方式处理不同的部分:
对于哈希:
您可以根据您的要求使用 [HASHBYTES]
和任一种SHA-2算法。 HASHBYTES('SHA2_256', @Password);
请注意,此函数仅需8000字节,并且可以在varchar,nvarchar或varbinary上运行,这在您的情况下应该足够,但以防万一。
如果输入约束对您不起作用,您还可以在.NET中编写 SQL CLR
函数来进行散列。
对于盐:
使用 GUIDs
,使用GUID的一部分可能无法提供盐所需的熵,因此我建议使用整个字符串。
或使用 RANDOM()
函数生成一个带有逻辑位的唯一字母数字字符串。
过程:
在散列Salt
之前将Password
添加到(HASHBYTES('SHA2_256', @Password + Salt);
,并在注册过程中为用户存储Hashed output
和Salt
。
在随后的登录尝试中,添加user-entered password with the salt
并获取Hashed输出,然后将其与存储哈希值进行比较。如果值匹配,那么用户是合法的,否则不是。