【发布时间】:2016-10-13 05:19:01
【问题描述】:
我在以下网址中引用了以下站点以获取 Rijndael 和 Asp.net 哈希实现。
- Rijndael - How to generate Rijndael KEY and IV using a passphrase?
- 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 Identity 散列密钥?
有没有可能做到这一点? Asp.net 身份是否安全?
【问题讨论】:
-
1) 每一个被创造出来的想法都可能被打破——这是生活规则。因此,如果您弄清楚 asp.identity 是如何加密密钥的,那么您将弄清楚如何解密它。 2)如果您想更好地保护您的用户密码,您可以创建自己的算法来加密输入密码并将此哈希字符串发送到 Asp.net 以再次对其进行加密。 3)如果您只想检查用户输入的密码是否与数据库中的密码相同,则需要加密输入并将此哈希与数据库中已有的哈希进行比较
-
那么在对密码进行哈希处理之前,对密码进行加密,然后进行哈希处理对安全性来说是个好主意?
-
“当 RijnDael 可以解密加密密钥时”。不,您无法解密散列密码。你混淆了散列和加密吗?
-
是的,你是对的@Martheen。散列不应该被解密(即使是我在实施之后)。在我的问题中,我问过这样的问题,开发人员会解密 asp.net 散列(因为 RijnDael 使用与 asp.net 身份散列相同的 Rfc2898DeriveBytes)?
-
开发者如何解密? Rijndael 仅使用 DeriveBytes 进行键拉伸。 ASP.NET 身份不调用 Rijndael,所以没有什么可以解密
标签: c# asp.net encryption hash rijndael