2012-04-02 131 views
5

在Python中我使用下面的代碼爲用戶創建密碼哈希:哈希字符串大小

self.password = hmac.new(security_key, raw_password, sha1).hexdigest() 

現在,我想挽救這個值的數據庫。什麼大小必須是我的數據庫列? 它似乎與digest_size屬性相關,但不知道什麼對象或類具有此類屬性。 sha1沒有一個。

+0

SHA-1不是密碼散列的最佳選擇。它速度非常快,而且它被認爲很脆弱(如果尚未破裂)。最佳實踐類似[bcrypt](http://code.google.com/p/py-bcrypt/),但如果你想堅持Python標準庫,那麼'sha256'比'sha1'更好。 – 2012-04-02 12:07:07

回答

3

hmac的輸出取決於它使用的哈希算法。在你的情況下,它使用sha1,根據RFC2104,它總是輸出一個20字節長的字節串。調用hexdigest()將字節串轉換爲可打印的十六進制格式。 1個字節= 2個十六進制數,所以總數爲40個十六進制字符。您可以安全地將您的數據庫列設置爲char(40)。

1

sha-1散列函數的輸出長度爲20個字符。 (根據RFC2104,由hmac python module docs引用: 「... ...你散列輸出(L = 16爲MD5,L = 20的字節長度爲SHA-1)」。)

您也可以驗證這通過:

import hashlib; 
H = hashlib.sha1("blahblah"); 
print(H.digest_size);