繁体   English   中英

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

[英]Hashing a password using SHA256 and .NET/Node.js

我在.NET生成的数据库中存储用户密码的SHA256哈希值,我需要能够使用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=

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

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

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

请参阅Microsoft ASP.NET 2.0提供程序:简介 ,以获取提供程序的.NET源代码链接,以便您了解如何应用salt值。

如果您需要更多帮助,则需要包含代码。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM