Подтвердить что ты не робот

Хеширование пароля с использованием SHA256 и .NET/Node.js

Im Хранение SHA256 хэшей паролей пользователей в моей базе данных, созданных .NET, и мне нужно проверить их с помощью Node.js. Единственная проблема заключается в том, что .NET и Node.js создают разные хэши для одного и того же пароля.

Password: ThisPassword  

.NET:

var ue = new UnicodeEncoding();  
var byteSourceText = ue.GetBytes("ThisPassword");  
var byteHash = new System.Security.Cryptography.SHA256Managed().ComputeHash(byteSourceText);  
return Convert.ToBase64String(byteHash);

//Tlwxyd7HIQhXkN6DrWJtmB9Ag2fz84P/QgMtbi9XS6Q=

Node.js(с использованием Crypto):

var crypto = require('crypto');
return crypto.createHash('sha256').update('ThisPassword').digest('base64')

//d7I986+YD1zS6Wz2XAcDv2K8yw3xIVUp7u/OZiDzhSY=

Я нашел этот, но не смог понять, как реализовать его решение.

4b9b3361

Ответ 1

Изменить: вы используете UTF-16 в С#, вы должны использовать ту же кодировку на обоих языках:

Node.js

var crypto = require("crypto");
var sha256 = crypto.createHash("sha256");
sha256.update("ThisPassword", "utf8");//utf8 here
var result = sha256.digest("base64");
console.log(result); //d7I986+YD1zS6Wz2XAcDv2K8yw3xIVUp7u/OZiDzhSY=

С#:

SHA256 sha256 = SHA256Managed.Create(); //utf8 here as well
byte[] bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes("ThisPassword"));
string result = Convert.ToBase64String(bytes);
Console.WriteLine(result); //d7I986+YD1zS6Wz2XAcDv2K8yw3xIVUp7u/OZiDzhSY=

Ответ 2

Если вы используете встроенный класс SqlMembershipProvider класса .NET Framework из System.Web.Security, хеш включает значение соли, а также материал пароля при его создании. Простое хеширование только пароля в node.js никогда не приведет к такому же результату, как хэш в базе данных.

См. Поставщики Microsoft ASP.NET 2.0: введение для ссылки на исходный код .NET для провайдера, который позволит вам увидеть, как соль значение применяется.

Вам нужно указать свой код, если вам нужна дополнительная помощь.

Ответ 3

Я создал модуль node pbkdf2 (источник https://github.com/fundon/pbkdf2)

Требуется node >= 0.11.11

var pbkdf2 = require('pbkdf2');
var p = 'password';
var s = pbkdf2.generateSaltSync(32);
var pwd = pbkdf2.hashSync(p, s, 1, 20, 'sha256');
var bool = pbkdf2.compareSync(pwd, p, s, 1, 20, 'sha256');