6

我有一个包含三列的表:问题、答案、散列。我想用使用 sha512 散列的 Answer 列更新 Hashed 列。

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

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

我知道语法错误,但不知道为什么。

在此先感谢您的帮助!

R

4

2 回答 2

13

试一试。

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 )

于 2012-09-27T00:14:58.540 回答
1

我希望这还不算太晚。即使,也许其他人会发现这个提示:

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

它的作用是使用它的模式创建 sha-512 哈希:$6$来自字符串 'Answer'

如果您使用的是 debian,您也可以使用mkpasswdfrom packagelibstring-mkpasswd-perl为您生成 SHA-512,并更新为字符串。

于 2016-08-24T11:16:14.877 回答