C# 我们在C中使用重新散列密码吗

C# 我们在C中使用重新散列密码吗,c#,hash,C#,Hash,我正在使用哈希和Salt来解密密码。这就是我正在使用的方法: public string CreateSalt(int size) { var rng = new RNGCryptoServiceProvider(); var buff = new byte[size]; rng.GetBytes(buff); return Convert.ToBase64String(buff); } public

我正在使用哈希和Salt来解密密码。这就是我正在使用的方法:

  public string CreateSalt(int size)
    {
        var rng = new RNGCryptoServiceProvider();
        var buff = new byte[size];
        rng.GetBytes(buff);
        return Convert.ToBase64String(buff);

    }

    public string GenerateHash(string input, string salt)
    {
        byte[] bytes = Encoding.UTF8.GetBytes(input + salt);
        SHA512Managed sha256 = new SHA512Managed();
        byte[] hash=  sha256.ComputeHash(bytes);
        return ByteArrayToHexString(hash);
    }
在我对密码进行哈希运算并将其保存到数据库后,如何重新哈希它?或者即使我需要重新洗漱?
用户将创建登录网站的密码。我还没有决定忘记密码将如何工作,所以可能它将重置密码并发送给他们。有关于散列的想法吗

您必须在数据库中存储哈希密码和密码salt。当用户登录时,您获得输入密码,将其与数据库中存储的salt进行散列,然后将结果与存储的散列密码进行比较


关于忘记密码的事你说得对。只需创建一个随机密码并将其发送给用户。

您是否计划“重新设置”该密码以重置密码?如果是这样,您可以允许用户输入新密码并对其进行hash+salt运算,或者对新生成的密码进行hash+salt运算并替换旧密码,或者使用temp password列以允许旧密码继续使用。由于SHA512运算速度太快,因此它被认为是密码哈希运算的糟糕选择,对于像bcrypt这样的PBKDF方案有一些疑问,但它可能是一个更好的选择。这里有一个很好的问答:看看这个。。还有很多其他的选择,你也需要做一些调查和谷歌搜索