2012-09-27 98 views
4

我有一個名爲三列的表:Question,Answer,Hashed。我想使用sha512更新哈希列,使用Answer列哈希。使用sha512散列整個列

我試圖從我的MySQL數據庫使用此語法直接做更新,但沒有奏效:

UPDATE表名 SET散列= SHA512(答案) WHERE散列IS NULL

我知道語法是錯誤的,但不知道爲什麼。

在此先感謝您的幫助!

[R

回答

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

+0

謝謝G.不幸的是,我收到這個錯誤: 「SHA2不存在」 – user1497265

+0

啊。你使用的是什麼版本的MySQL? SHA2在5.5以後可用 –

+0

就是這樣。我使用5.0。再次感謝!! – user1497265

0

我希望這不是太晚。即使,也許別人會發現這個提示:

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

它做什麼,它會創建SHA-512散列,與它的模式:從字符串「答案」

$6$如果您使用的是Debian,您也可以使用包libstring-mkpasswd-perl中的mkpasswd爲您生成SHA-512,並以字符串形式更新。