2016-10-13 56 views
0

我已經在下面的URL中引用了以下網站的Rijndael和Asp.net哈希實現。是Asp.net身份哈希安全嗎?

  1. Rijndael算法 - How to generate Rijndael KEY and IV using a passphrase?
  2. Asp.net哈希 - ASP.NET Identity default Password Hasher, how does it work and is it secure?

在這兩個實施, 用於獲取密碼的隨機字節以下。 的Rijndael

Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(password, SALT); 

Asp.net身份散列

Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(providedPassword, salt, HasingIterationsCount) 

上面的代碼後,Rijndael算法適用於返回的字節的加密。 但是,asp.net身份複製結果與鹽字節數組一樣,並返回散列鍵。

在這裏,我有一個困惑。 RijnDael和Asp.net身份散列使用相同的Rfc2898DeriveBytes

當RijnDael可以解密加密密鑰(這是在Rfc2898DeriveBytes的幫助下完成的),爲什麼我們可以解密Asp.net標識符散列密鑰?

有沒有可能做到這一點? 是否保護了Asp.net身份?

+1

1)每一個被創造的想法都可以被打破 - 這是生活的規則。所以,如果你弄清楚如何asp.identity加密密鑰比你會想出如何解密它。 2)如果你想保護你的用戶密碼比你可能創建自己的算法,將加密輸入密碼併發送這個哈希字符串到Asp.net再加密一次。 3)如果你只是想檢查用戶輸入的密碼是否與數據庫中的密碼相同,你需要加密輸入並將該散列與數據庫中已有的散列進行比較 – DespeiL

+0

因此,在對密碼進行散列之前,先對密碼進行加密然後進行散列將是安全的好主意? –

+1

「RijnDael可以解密加密密鑰時」。不,你不能解密哈希密碼。你混淆了哈希和加密嗎? – Martheen

回答

1

是的,ASP.NET的密碼哈希方法是安全的。

在你提供的示例中,用戶正在使用的加密技術稱爲高級加密標準(AES,也稱爲Rijndael算法)。這就是祕密可以被解密的原因。

用戶只使用Rfc2898DeriveBytes類來得到keyinitialisation vector

該類不用於散列祕密消息。加密是隱藏信息的內容。

ASP.NET使用Rfc2898DeriveBytes類來散列密碼。這個過程不能逆轉。

+0

謝謝@Rowan Freeman。你有什麼我希望是一個答案。非常感謝。 –