mysql 8.0 版中的 hash() 函数
hash() function in mysql version 8.0
我正在尝试将密码存储在我的用户 table 中。当然我想先加盐和哈希。
但是 mysql 中没有 hash() 方法了。我如何在 8.0 版中执行此操作?有其他选择吗?
在此先感谢您的帮助。
在将密码发送到 SQL 之前,您应该在您的应用中对密码进行哈希处理。
我为什么这么说?毕竟你可以这样做:
INSERT INTO Accounts (user, salt, password)
VALUES ('myuser', '1234', SHA2(CONCAT('xyzzy', '1234'), 256))
但现在您的密码 'xyzzy' 以纯文本形式出现在您的查询日志和二进制日志中,即使它以散列形式存储在 table 本身中也是如此。如果您没有充分保护您的日志,黑客可能会获取它们并找到每个人的密码。
而是在您的应用程序代码中执行散列操作。获取结果,并将哈希字符串逐字保存在数据库中。
INSERT INTO Accounts (user, salt, password)
VALUES ('myuser', '1234', 'd3822b5f03ad0c1a363d874238f6b48fd68a131cc35d5e55c77a81db1d266b84')
这样就不会记录明文密码。
同样,当您在用户登录时对他们进行密码检查时,读取加盐值,然后使用它来散列他们输入的密码,然后将其与存储在数据库中的散列字符串进行比较。
SELECT salt FROM Accounts WHERE user = ?
...calculate hash string using user input + salt...
SELECT password = ? AS password_matches FROM Accounts WHERE user = ?
我正在尝试将密码存储在我的用户 table 中。当然我想先加盐和哈希。
但是 mysql 中没有 hash() 方法了。我如何在 8.0 版中执行此操作?有其他选择吗?
在此先感谢您的帮助。
在将密码发送到 SQL 之前,您应该在您的应用中对密码进行哈希处理。
我为什么这么说?毕竟你可以这样做:
INSERT INTO Accounts (user, salt, password)
VALUES ('myuser', '1234', SHA2(CONCAT('xyzzy', '1234'), 256))
但现在您的密码 'xyzzy' 以纯文本形式出现在您的查询日志和二进制日志中,即使它以散列形式存储在 table 本身中也是如此。如果您没有充分保护您的日志,黑客可能会获取它们并找到每个人的密码。
而是在您的应用程序代码中执行散列操作。获取结果,并将哈希字符串逐字保存在数据库中。
INSERT INTO Accounts (user, salt, password)
VALUES ('myuser', '1234', 'd3822b5f03ad0c1a363d874238f6b48fd68a131cc35d5e55c77a81db1d266b84')
这样就不会记录明文密码。
同样,当您在用户登录时对他们进行密码检查时,读取加盐值,然后使用它来散列他们输入的密码,然后将其与存储在数据库中的散列字符串进行比较。
SELECT salt FROM Accounts WHERE user = ?
...calculate hash string using user input + salt...
SELECT password = ? AS password_matches FROM Accounts WHERE user = ?