繁体   English   中英

C# 和 NodeJS PBKDF 加密

[英]C# & NodeJS PBKDF Encryption

我正在制作一个网站和一个桌面应用程序,它们都将使用相同的数据库,但我需要它们生成相同的哈希值,我该如何使用 NodeJS 和 C# 来做到这一点?

const crypto = require('crypto');
const key = crypto.pbkdf2Sync('pass', 'saltsaltsaltsalt', 100000, 64, 'sha256').toString('base64');
console.log(key);
Output: lLRnCThEdyMUjj6QazuIBvI/hRv7bT4r9Z5FKJ39NOOmFvI+5V5YhqTxInWCi3D8rOB1eMGV/Yn71m597/bzWw==
using System;
using System.Security.Cryptography;

public class Program
{
    private const int HashIterations = 100000;
    public static void Main()
    {
        var password = "pass";
        var salt = "saltsaltsaltsalt";
        var xx = GeneratePasswordHash(password, salt);
        Console.WriteLine(xx);
    }

    public static string GeneratePasswordHash(string password, string salt, int hashIterations = HashIterations)
    {
        byte[] hash;
        using (var crypto = new Rfc2898DeriveBytes(password, Convert.FromBase64String(salt), hashIterations))
        {
            hash = crypto.GetBytes(64);
        }

        return Convert.ToBase64String(hash);
    }
}
Output: 0Nj5NJWM8dtAFFUU8T3UUQhmdNIbKTLndqjqXzkulEXRVsjlIb28C00daPi96pDk+evKY3CLbkLOGVZUuNiimQ==

我期望和需要的是这两个程序都输出相同的哈希值。

根据这个答案,有一个nuget 包可以在 c# 中使用 PBKDF2。

根据文档,您可以像这样使用它:

using System.Security.Cryptography;
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
var password = "pass";
var salt = "saltsaltsaltsalt";
string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
            password: password,
            salt: Convert.FromBase64String(salt),
            prf: KeyDerivationPrf.HMACSHA1,
            iterationCount: 10000,
            numBytesRequested: 64));
Console.WriteLine(hashed);

我目前无法验证这是否为您提供了与 NodeJS 代码相同的哈希值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM