我正在使用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中的所有其他哈希函数一样.
您可能正在阅读文档中的此声明:
As of MySQL 5.5.6, the return value is a nonbinary string in the connection character set. Before 5.5.6, the return value is a binary string.
我可以看到读者如何认为这意味着它返回二进制字节,但这是一种误解.
这实际上意味着该字符串具有二进制字符集.它仍然是十六进制数字的明文字符串.事实上,MySQL中没有任何哈希函数返回一个字节字符串,就像你在它上面运行UNHEX()一样,它们都返回十六进制数字的字符串.十六进制数字字符串的长度是等效二进制字节长度的两倍.
标签:mysql,sha2
来源: https://codeday.me/bug/20190715/1467392.html