【发布时间】:2019-12-28 19:37:22
【问题描述】:
我正在制作一个网站和一个桌面应用程序,它们都将使用相同的数据库,但我需要它们生成相同的哈希值,我如何使用 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==
我期望和需要的是这两个程序都输出相同的哈希值。
【问题讨论】:
-
好吧 - 你必须做得比这更好 - 你已经要求一个例子的两个方面,但只产生了所需的一半 - 输出是什么?为什么需要两个实现?为什么需要两个? nodeJS 示例中有额外的参数 - stackoverflow.com/questions/25899014/…
-
我有一个 C# 中的桌面应用程序和我的 NoeJS 网站,用户可以使用同一帐户登录网站或应用程序,为此我需要将存储的哈希与登录输入密码哈希,但节点和 c# 给我相同的密码和盐不同的哈希。我不懂 C#,所以我在 stackoverflow 上寻求帮助。
-
如果你知道 Node - 你可以只拥有一个返回哈希的节点端点,给定密码?干燥和那个?也是真理的来源之一。但这对您的问题没有帮助 - 您有示例输入和输出吗?
-
我添加了输出并添加到代码中,请检查一下
-
你是 Base64 解码你的盐。如果您在 JavaScript 代码中将其指定为字符串,我相信该库采用 UTF8 编码,而不是 base64 解码。