Encryption
鹽值是秘密還是可以像 IV 一樣以明文形式儲存?
從 Wikipedia 我讀到 IV 用於隨機化明文到密文的映射,並且 IV 通常與加密記錄一起儲存(以明文形式)。(http://en.wikipedia.org/wiki/Initialization_vector)
但是,如果我在使用 Rfc2898DeriveBytes 派生密鑰時查看 C# 中的特定實現,則需要鹽值,並且我了解鹽的需要。但很明顯,稍後我將需要鹽來從我的秘密密碼中重新生成密鑰。這是否意味著鹽本身不是秘密,可以與加密記錄一起以明文形式儲存,就像 IV 一樣?
string passphrase = "Hello World, I'm the secret!"; string salt = "13245678"; var deriveBytes = new Rfc2898DeriveBytes(passphrase, Encoding.UTF8.GetBytes(salt), 50000); using (var rijndael = new RijndaelManaged()) { rijndael.KeySize = 256; rijndael.Key = deriveBytes.GetBytes ( rijndael.KeySize / 8 ); rijndael.IV = deriveBytes.GetBytes ( rijndael.BlockSize / 8 ); ... }
鹽可以公開。
重要的是,當您從某些輸入猜測中重新導出密碼時,您可以使用鹽。
在許多方面,鹽執行的功能與 IV 對密碼執行的功能相同。
您可以在此處閱讀有關鹽和密碼散列的更多資訊。