【问题标题】:SHA256 / SHA512: MySQL Code for Password Hashing and SaltingSHA256 / SHA512:用于密码散列和加盐的 MySQL 代码
【发布时间】:2015-04-12 17:22:58
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 您使用的是哪个 RDBMS?

标签: mysql sql hash salt sha256


【解决方案1】:

我在安全方面没有权威,但使用 SQL Server,您可以通过以下方式处理不同的部分:

对于散列:

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

如果输入约束不适合您,您还可以在 .NET 中编写 SQL CLR 函数来进行哈希处理。

为了盐:

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

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

流程:

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

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

【讨论】:

  • 谢谢你,只是几个问题,你能更详细地展示如何创建和存储盐吗?我还会存储 HASHBYTES('SHA2_256', @Password + Salt) 操作和盐的散列输出吗?因此,为了验证用户身份,我会使用他输入的密码生成盐并重新哈希以匹配我拥有的存储哈希?最后,如果要在 SQL 代码中完成,还是在存储过程中完成,还是通常使用 JDBC 在 Java 代码中完成?
  • 您将创建一个表来存储每个用户(用户 ID)的哈希输出和 Salt。为了存储这些生成的数据,您必须查看 SQL InsertUpdate 构造。您对身份验证过程的理解是正确的,是的,所有这些都可以在 SQL 过程中以最佳方式完成。
猜你喜欢
  • 2014-06-10
  • 2015-02-17
  • 2011-09-07
  • 2015-08-20
  • 2012-07-22
  • 2011-07-27
  • 2011-06-02
  • 2011-10-29
相关资源
最近更新 更多