【问题标题】:Is Asp.net identity hashing Secured?Asp.net 身份哈希是否安全?
【发布时间】:2016-10-13 05:19:01
【问题描述】:

我在以下网址中引用了以下站点以获取 Rijndael 和 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 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


【解决方案1】:

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

在您提供的示例中,用户正在使用一种称为高级加密标准(AES,也称为 Rijndael)的加密技术。这就是秘密可以被解密的原因。

用户仅使用Rfc2898DeriveBytes 类来获取key 和initialisation vector。

该类不用于散列秘密消息。加密是隐藏消息的原因。

ASP.NET 使用Rfc2898DeriveBytes 类来散列密码。此过程不可逆转。

【讨论】:

  • 感谢@Rowan Freeman。你得到了我期望的答案。非常感谢。
猜你喜欢
  • 2013-04-24
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多