2010-04-02 119 views
7

我想知道如果我使用PHP的hash()函數來生成sha512哈希值,我的MySQL表字段將如何顯示,以便能夠保存哈希密碼。在MySQL中存儲SHA-512哈希

這是我的當前的MySQL密碼字段佈局

char(40) 
+0

回顧關於「數據類型」的MySQL參考手冊部分:http://dev.mysql.com/doc/refman/5.1/en/data-types.html – bdl 2010-04-02 19:05:36

回答

17

甲SHA512散列被表示爲128個字符長的串

例如,下面的代碼部分:

$sha512 = hash('sha512', "Hello, World!"); 
echo strlen($sha512); 

會給這樣的輸出:

128 


這意味着你的char(40)相差很多,而且你應該使用一個char(128)


另一種解決方案是將其存儲爲二進制形式,而不是字符串 - 這意味着64個字節。

但是請注意,在某些情況下,我想可能很難處理這種表示。

+0

你能解釋一下你從哪裏得到64字節嗎?我試圖理解數學。 – 2011-11-13 17:52:34

+1

一個sha512被表示爲128個十六進制字符;當使用十六進制時,用兩位數字表示一個字節(從0x00到0xFF);因此,要存儲可以用128個十六進制字符表示的二進制值,則需要64個字節(如果將其存儲爲二進制文件而不是十六進制文本)。 – 2011-11-13 18:20:46

+0

有道理。謝謝! – 2011-11-13 18:22:46