簡體   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