如果節點的crypto.PBKDF2
使用HMAC SHA-1,那麼密鑰長度如何能超過20個字節?使用HMAC SHA-1的PBKDF2如何返回超過20個字節?
下面是我的理解(顯然不正確):crypto.PBKDF2(password, salt, iterations, keylen, callback)
使用HMAC SHA-1來用鹽散列密碼。然後它用相同的鹽進行散列和散列化處理。它會重複這一點,無論你多次重複,你都會告訴它,然後將結果傳回給你。結果將被截斷爲您在keylen
中指定的字節數。
SHA-1 outputs 160 bits或20個字節。但是,我可以要求keylen
從crypto.PBKDF2
超過20個字節,並且過去的第20個字節,數據不會重複。這對我來說沒有意義。
我在這裏誤解了什麼?
試試看:
c.pbkdf2('password', 'salt', 1, 21, function(err, key) {
for (var i = 0; i < key.length; i++) {
console.log(key[i].toString(36));
}
});
我希望看到某種模式的20字節後,但是我沒有。
有趣的帖子,目前爲Bouncy實施HKDF –
請注意,我完全同意您對使用PBKDF2更大尺寸輸出的評估。就我個人而言,我認爲這是足夠的理由來考慮創建一個PBKDF3或類似的東西,爲PBE構造創建更長的OKM(輸出密鑰材料)。 KDF在密碼世界中受到的關注很少。就我個人而言,我已經將KDF2與PBKDF2結合在一起,但由於HKDF更安全,所以這肯定是首選。大衛已經接受我的執行意思:) –
@owlstead相關的郵件列表:[crypt-dev](http://www.openwall.com/lists/crypt-dev) – CodesInChaos