使用SHA256散列密码和.NET / Node.js的(Hashing a password us

2019-07-04 13:53发布

林贮藏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=

我发现这个 ,但无法弄清楚如何实施他的解决方案。

Answer 1:

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


Answer 2:

如果你正在使用.NET Framework的内置的SqlMembershipProvider类从System.Web.Security,哈希结合盐值以及时生成它的密码材料。 只需单独散列密码,在你的Node.js绝不会产生相同的结果在数据库中的哈希值。

请参阅微软ASP.NET 2.0提供:介绍了一个链接到.NET源代码的供应商,将让你看到盐值是如何应用的。

你需要,如果你需要比这更多的帮助,包括你的代码。



Answer 3:

我所创建的节点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');


文章来源: Hashing a password using SHA256 and .NET/Node.js