c# - 将 .NET 与 nodejs(加密)进行比较时哈希值不同

标签 c# node.js hash

当我尝试在 Node 和 .NET 中散列相同的密码/salt 组合时,我得到了不同的值。 (是的,我知道 SHA1 很危险,我也在努力改变它)。

C#

byte[] unencodedBytes = Encoding.Unicode.GetBytes(password);
byte[] saltBytes = Convert.FromBase64String(salt);

byte[] buffer = new byte[unencodedBytes.Length + saltBytes.Length];

Buffer.BlockCopy(unencodedBytes, 0, buffer, 0, unencodedBytes.Length);
Buffer.BlockCopy(saltBytes, 0, buffer, unencodedBytes.Length - 1, saltBytes.Length);

byte[] hash = HashAlgorithm.Create("SHA1").ComputeHash(buffer);

//This is what I need
string hashedString = Convert.ToBase64String(hash);

这是我的 JS

var buffer = [];
var unicodePassword = new Buffer(password, 'utf16le');
for (var i = 0; i < unicodePassword.length; ++i) {
     buffer.push(unicodePassword[i]);
}
var salt = new Buffer(userEntry.PasswordSalt, 'base64');
for (var i = 0; i < salt.length; i++) {
      buffer.push(salt[i]);
}
var bufferString = new Buffer(buffer);

//This is what I need
var hashedString = crypto.createHash('sha1').update(bufferString).digest('base64');

我知道当我将它发送出去进行哈希处理时,我在两个实现中得到了完全相同的字节数组。看起来这段代码在做完全相同的事情,但 hashedString 的值不一样。知道发生了什么事吗?

最佳答案

默认的 Encoding.Unicode 发出 byteOrderMask 如果在 C# 代码中创建没有 BOM 的编码会怎样?

新的 UnicodeEncoding(false, false)

关于c# - 将 .NET 与 nodejs(加密)进行比较时哈希值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38131732/

相关文章:

c# - 可以将 Asp.Net MVC token 限制为一次性使用吗

c# - 格式化跟踪输出

Java hashCode方法最大返回值

perl - 使用 Perls unpack() 验证加盐哈希

c# - 将依赖项注入(inject) Entity Framework 实体和项目

c# - 如何在 MS Visual Studio 2013 中创建数据库?

mysql - Nodejs mysql 选择响应

javascript - Underscore.js 对象-对象映射器?

javascript - 我正在尝试创建一个文档来使用 Mongoose 进行建模,但 model.create() 不会返回任何 promise

c# - 为此结构实现 GetHashCode 的正确方法