C# 在测试密码匹配时,迭代次数减少了这一数量在我们的安全姐妹网站上查看这个问题:代码中的循环正在实现答案的“缓慢”部分。(根据随机猜测,我打赌SecurityIndex确实是一种32位salt)添加的GenerateHashStringPassword散列在攻

C# 在测试密码匹配时,迭代次数减少了这一数量在我们的安全姐妹网站上查看这个问题:代码中的循环正在实现答案的“缓慢”部分。(根据随机猜测,我打赌SecurityIndex确实是一种32位salt)添加的GenerateHashStringPassword散列在攻,c#,hash,cryptography,C#,Hash,Cryptography,在测试密码匹配时,迭代次数减少了这一数量在我们的安全姐妹网站上查看这个问题:代码中的循环正在实现答案的“缓慢”部分。(根据随机猜测,我打赌SecurityIndex确实是一种32位salt)添加的GenerateHashStringPassword散列在攻击者硬件上需要较慢。我从未见过这种安全措施,但它确实可以保护您免受字典攻击(尽管在这种情况下salt应该足够)我想问,这会提高安全性。这取决于GenerateHashString正在做什么。您希望“登录的负载测试”做得很糟糕,因为有人试图入侵,


在测试密码匹配时,迭代次数减少了这一数量在我们的安全姐妹网站上查看这个问题:代码中的循环正在实现答案的“缓慢”部分。(根据随机猜测,我打赌
SecurityIndex
确实是一种32位salt)添加的GenerateHashStringPassword散列在攻击者硬件上需要较慢。我从未见过这种安全措施,但它确实可以保护您免受字典攻击(尽管在这种情况下salt应该足够)我想问,这会提高安全性。这取决于
GenerateHashString
正在做什么。您希望“登录的负载测试”做得很糟糕,因为有人试图入侵,这正是负载测试所做的。然而,许多内置的字符串散列函数都会用到,所以我们需要看看GenerateHashString是如何告诉您是否需要自己做的。现代计算机在测试密码匹配时,每秒可以尝试数十亿次哈希运算,进行迭代运算。请在我们的安全姐妹网站上查看这个问题:代码中的循环正在实现答案的“缓慢”部分。(根据随机猜测,我打赌
SecurityIndex
确实是一种32位salt)添加的GenerateHashStringPassword哈希在攻击者的硬件上需要很慢。
private const int totalHashCount = 1723;

public string CreateHash(string salt, string password, int securityIndex)
{
  string hashedPass = this.GenerateHashString(salt + password, securityIndex);
  for (int i = 1; i <= totalHashCount; i++)
  {
    hashedPass = this.GenerateHashString(hashedPass, securityIndex);
  }
  return hashedPass;
}
protected internal string GenerateHashString(string textToHash, int securityIndex = 0)
{
   UnicodeEncoding uEncode = new UnicodeEncoding();
   SHA512Managed sha = new SHA512Managed();

   byte[] bytVal = uEncode.GetBytes(textToHash + hashIntPool[securityIndex].ToString());
   byte[] hashVal = sha.ComputeHash(bytVal);

   return Convert.ToBase64String(hashVal);
 }