当我们设置SaltEnabled时,Microsoft Enterprise Library中HashProvider中的salt是如何生成的?

新机器随机吗?这是一些神奇的数字吗?

(我知道什么是盐,问题是企业库 HashProvider 中盐的实际值(value)是多少)

最佳答案

编辑:

有关示例实现,请参阅 Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.HashAlgorithmProvider。哈希步骤是:

  • 如果 SaltEnabled,则使用 RNGCryptoServiceProvider 为盐长度生成随机字节。
  • 将盐附加到明文中。
  • 散列加盐明文。
  • 然后(这是重要的一步),再次将盐添加到 哈希值

  • 要与散列文本进行比较,您必须使用:
    public bool CompareHash(byte[] plaintext, byte[] hashedtext)
    

    与重新散列和比较。如果您重新哈希,则会生成一个新的随机盐,而您就迷路了。

    CompareHash 执行以下操作:
  • 从哈希文本中提取非哈希盐。请记住,它是附加在上面的第 4 步中的。
  • 使用该盐来计算明文的哈希值。
  • 将新散列与减去盐的散列文本进行比较。如果它们相同 - 为真,否则为假。

  • 原来的:

    “如果在 HashProvider 上启用了 salt,则提供者将生成一个随机字节序列,并将其添加到哈希中。如果将哈希值与未哈希值进行比较,则将从哈希值中提取 salt 并用于在比较之前散列未散列的值。”



    “至于解码为散列值。这是无法完成的。在创建散列后,应该无法将其反转为原始值。
    但是,您可以做的是通过相同的算法将未散列值与散列值进行比较并比较输出。”

    来自 http://www.codeplex.com/entlib/Thread/View.aspx?ThreadId=10284

    关于.net - Enterprise Library HashProvider 中的盐是什么? (SaltEnabled 键),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/126148/

    10-13 07:38