我正在使用 MySql 5.5.32 并尝试在我们在业务层中拥有的存储过程中重现一些代码,以便我可以为使用 sql
的人设置密码。虽然 SHA2 函数似乎有问题,但也许我遗漏了一些东西:
SELECT length(SHA2("bob", 512))
返回128,不应该是64吗?
SELECT length(SHA2("bob", 256))
它返回 64,所以看起来要么是我遗漏了什么,要么是 SHA2 中存在错误。有任何想法吗?
最佳答案
我编写了 patch for the SHA2() function in 2005 并将其贡献给了 MySQL(开发人员然后稍微编辑了我的代码以符合他们的编码标准)。
该函数始终返回一串十六进制数字,就像 MySQL 中的所有其他哈希函数一样。
您可能正在阅读文档中的此声明:
我可以看到读者会如何认为这意味着它返回二进制字节,但这是一种误解。
这实际上意味着该字符串具有二进制字符集。它仍然是一个纯文本的十六进制数字字符串。事实上,MySQL 中的任何散列函数都不会像在其上运行 UNHEX() 那样返回字节字符串,它们都返回十六进制数字字符串。一串十六进制数字的长度是等效二进制字节长度的两倍。
如果您不知道我的意思是二进制字符集,请参阅 What is binary character set?
SHA2() 在 5.5.6 中是 changed to use the connection character set,而其他哈希函数在 5.5.3 中以相同的方式更改。
关于MySQL SHA2 功能似乎不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22104794/