password nodejs node encrypt decrypt crypto javascript .net node.js hash sha2

javascript - nodejs - Hashing una contraseña usando SHA256 y.NET/Node.js



nodejs password hash (3)

Estoy almacenando SHA256 hashes de contraseñas de usuario en mi base de datos generada por .NET y necesito poder verificarlas con Node.js. El único problema es que .NET y Node.js crean hashes diferentes para la misma contraseña.

Password: ThisPassword

.RED:

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 (utilizando Crypto):

var crypto = require(''crypto''); return crypto.createHash(''sha256'').update(''ThisPassword'').digest(''base64'') //d7I986+YD1zS6Wz2XAcDv2K8yw3xIVUp7u/OZiDzhSY=

Encontré this , pero no pude averiguar cómo implementar su solución.


Creé el módulo pbkdf2 del nodo (fuente https://github.com/fundon/pbkdf2 )

Nodo requerido> = 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'');


Edición: está utilizando UTF-16 en C #, debe usar la misma codificación en ambos idiomas:

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=

DO#:

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=


Si está utilizando la Clase SqlMembershipProvider incorporada de .NET Framework desde System.Web.Security, el hash incorpora un valor de sal así como el material de la contraseña cuando se genera. Simplemente, el hashing de la contraseña solo en su node.js nunca producirá el mismo resultado que el hash en la base de datos.

Consulte Proveedores de Microsoft ASP.NET 2.0: Introducción para un enlace al código fuente de .NET para el proveedor que le permitirá ver cómo se aplica el valor de sal.

Necesita incluir su código si necesita más ayuda que esta.