使用sha512散列整个列

时间:2012-09-27 00:11:44

标签: mysql sha512

我有一个包含三列的表:Question,Answer,Hashed。我想使用sha512更新Hashed列并使用Answer列进行哈希处理。

我尝试使用这种语法直接从我的MySql数据库进行更新,但它不起作用:

更新TableName SET Hashed = SHA512(答案) WHERE Hashed IS NULL

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

提前感谢您的帮助!

[R

2 个答案:

答案 0 :(得分:10)

给这一点。

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

答案 1 :(得分:0)

我希望现在还为时不晚。即使,也许其他人会发现这个暗示:

UPDATE TableName SET Hashed = ENCRYPT('Answer', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))) WHERE Hashed IS NULL;

它做什么,它创建sha-512哈希,使用它的模式:$6$来自字符串'Answer'

如果您使用的是debian,您也可以使用包mkpasswd中的libstring-mkpasswd-perl为您生成SHA-512,并以字符串形式更新。