使用SHA256和.NET / Node.js散列密码

即时通讯存储在由.NET生成的数据库中的用户密码SHA256散列,我需要能够检查Node.js. 唯一的问题是.NET和Node.js为相同的密码创build不同的哈希值。

Password: ThisPassword 

。净:

 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(使用encryption):

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

我发现这一点 ,但无法弄清楚如何实施他的解决scheme。

编辑:您在C#中使用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= 

C#:

 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= 

如果您使用.NET Framework内置的System.Web.Security的SqlMembershipProvider类,则哈希将生成盐值以及密码材质。 只需简单地将密码散列在node.js中就不会产生与数据库中散列相同的结果。

请参阅Microsoft ASP.NET 2.0提供程序:提供程序的 .NET源代码链接简介 ,它将使您看到如何应用salt值。

如果你需要更多的帮助,你需要包含你的代码。

我创build了节点pbkdf2模块(源https://github.com/fundon/pbkdf2

所需节点> = 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');