gpt4 book ai didi

c# - 如何验证作为哈希值存储在数据库中的密码?

转载 作者:太空狗 更新时间:2023-10-30 00:07:59 25 4
gpt4 key购买 nike

我想以加密形式存储密码。我用过sha256。我的代码如下

public static string ComputeHash(string plainText)
{
int minSaltSize = 4;
int maxSaltSize = 8;

Random random = new Random();
int saltSize = random.Next(minSaltSize, maxSaltSize);

byte[] saltBytes = new byte[saltSize];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetNonZeroBytes(saltBytes);

byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
byte[] plainTextWithSaltBytes = new byte[plainTextBytes.Length + saltBytes.Length];

for (int i = 0; i < plainTextBytes.Length; i++)
plainTextWithSaltBytes[i] = plainTextBytes[i];

for (int i = 0; i < saltBytes.Length; i++)
plainTextWithSaltBytes[plainTextBytes.Length + i] = saltBytes[i];


HashAlgorithm hash = new SHA256Managed();
byte[] hashBytes = hash.ComputeHash(plainTextWithSaltBytes);
byte[] hashWithSaltBytes = new byte[hashBytes.Length + saltBytes.Length];

for (int i = 0; i < hashBytes.Length; i++)
hashWithSaltBytes[i] = hashBytes[i];

for (int i = 0; i < saltBytes.Length; i++)
hashWithSaltBytes[hashBytes.Length + i] = saltBytes[i];

string hashValue = Convert.ToBase64String(hashWithSaltBytes);
return hashValue;
}

现在当用户登录时我想验证这个密码我该怎么做??

最佳答案

从用户那里获取明文密码,使用相同的算法对其进行哈希处理,并将新生成的哈希值与存储在数据库中的哈希值进行比较。如果两个哈希相同,则用户输入了正确的密码。

更新

您每次都使用新鲜的随机盐,从而导致不同的哈希值。只需在您的数据库中创建一个包含所用盐的新列,然后取这个。

将盐与散列一起保存不是安全问题。如果直接使用,salt 只会禁止将预先计算的彩虹表简单地用于单个哈希算法。它没有提供有关使用的真实密码的任何线索,也没有提供有关盐如何与纯文本密码组合(前置、追加、交织、...)的任何线索,因此可以安全地存储下一个到生成的散列。

关于c# - 如何验证作为哈希值存储在数据库中的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14474604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com