使用sha512哈希整个列

7

我有一个名为“Question”,“Answer”和“Hashed”的三列表。我希望使用sha512将答案列哈希后将其更新到Hashed列中。

我尝试直接使用以下语法从我的MySql数据库进行更新,但没有成功:

UPDATE TableName SET Hashed = SHA512(Answer) WHERE Hashed IS NULL

我知道语法是错误的,但不确定原因。

感谢您的帮助!

R

2个回答

15

试试这个。

UPDATE TableName SET Hashed=SHA2(Answer, 512) WHERE Hashed IS NULL;

请注意,这仅适用于MySQL 5.5及以上版本。对于5.5之前的版本,您需要使用应用程序代码来进行哈希处理(使用PHP获取所有行,迭代并将$row['answer']哈希为SHA512,然后在每个上运行UPDATE命令) (来源:http://dev.mysql.com/doc/refman/5.5/en//encryption-functions.html#function_sha2

很抱歉,我收到了这个错误信息:"SHA2不存在"。 - user1497265
啊,你使用的MySQL版本是什么?SHA2在5.5及以上版本可用。 - Chris Forrence
就这样了。我正在使用5.0。再次感谢! - user1497265

1
我希望现在不算太晚。即使是这样,也许其他人会发现这个提示:
UPDATE TableName SET Hashed = ENCRYPT('Answer', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))) WHERE Hashed IS NULL;

它的作用是创建一个SHA-512哈希,其模式为$6$,哈希的字符串是'Answer'。
如果您使用的是debian系统,您也可以使用libstring-mkpasswd-perl软件包中的mkpasswd来为您生成SHA-512,并更新为字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接