C# Base64 加密记录 及 解密 (适用于用户密码)

发布于 22 天前  57 次阅读


public class hash_encrypt
{
    private const int SaltSize = 16; // 16 bytes
    private const int KeySize = 32; // 32 bytes (256 bits)
    private const int Iterations = 100000; // 迭代次数,越高越安全但越慢
    private static readonly HashAlgorithmName HashAlgorithm = HashAlgorithmName.SHA256;

    // 生成密码哈希和盐
    public static (string Hash, string Salt) HashPassword(string password)
    {
        // 生成随机盐
        byte[] salt = new byte[SaltSize];
        using (var rng = RandomNumberGenerator.Create())
        {
            rng.GetBytes(salt);
        }

        // 生成哈希
        var pbkdf2 = new Rfc2898DeriveBytes(password, salt, Iterations, HashAlgorithm);
        byte[] hash = pbkdf2.GetBytes(KeySize);

        // 返回Base64编码的哈希和盐
        return (Convert.ToBase64String(hash), Convert.ToBase64String(salt));
    }

    // 验证密码
    public static bool VerifyPassword(string password, string storedHash, string storedSalt)
    {
        byte[] salt = Convert.FromBase64String(storedSalt);
        byte[] hashToCompare = new Rfc2898DeriveBytes(password, salt, Iterations, HashAlgorithm)
            .GetBytes(KeySize);

        byte[] hash = Convert.FromBase64String(storedHash);

        
        return CryptographicOperations.FixedTimeEquals(hash, hashToCompare);
    }
}
一个练习时长还差一年半的切图仔,有需求可联系 QQ:963827384
最后更新于 2025-08-11