当我尝试在 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/