林贮藏SHA256通过.NET生成在我的数据库的用户密码的哈希值,我需要能够与Node.js的进行检查 唯一的问题是,.NET和Node.js的为同一密码创建不同的哈希值。
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的(使用加密):
var crypto = require('crypto');
return crypto.createHash('sha256').update('ThisPassword').digest('base64')
//d7I986+YD1zS6Wz2XAcDv2K8yw3xIVUp7u/OZiDzhSY=
我发现这个 ,但无法弄清楚如何实施他的解决方案。
编辑:您正在使用UTF-16在C#中,必须在两种语言使用相同的编码:
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的内置的SqlMembershipProvider类从System.Web.Security,哈希结合盐值以及时生成它的密码材料。 只需单独散列密码,在你的Node.js绝不会产生相同的结果在数据库中的哈希值。
请参阅微软ASP.NET 2.0提供:介绍了一个链接到.NET源代码的供应商,将让你看到盐值是如何应用的。
你需要,如果你需要比这更多的帮助,包括你的代码。
我所创建的节点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');