相关疑难解决方法(0)

NodeJS - SHA256密码加密

我目前正在学习NodeJS中的加密和密码安全性.我正在使用当前使用PBKDF2的当前示例,我想将其切换为使用SHA256.这可能和/或有意义吗?我该怎么办呢?

var crypto = require('crypto');

var len = 128;

var iterations = 13000;

module.exports = function (pwd, salt, fn) {
  if (3 == arguments.length) {
    crypto.pbkdf2(pwd, salt, iterations, len, fn);
  } else {
    fn = salt;
    crypto.randomBytes(len, function(err, salt){
      if (err) return fn(err);
      salt = salt.toString('base64');
      crypto.pbkdf2(pwd, salt, iterations, len, function(err, hash){
        if (err) return fn(err);
        fn(null, salt, hash);
      });
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

javascript cryptography node.js

38
推荐指数
1
解决办法
5万
查看次数

SHA-256哈希值在C#和Javascript之间有所不同

我目前正在开发一个项目,该项目将涉及基于数据库行的入学信用卡刷卡.与遗嘱调用系统一样,CC号的SHA-256哈希必须与数据库行中的哈希匹配才能被视为"正确的提取".

但是,由于票房系统是基于浏览器的,因此必须使用Javascript对客户端进行散列的CC号码,然后与先前下载的将调用数据进行比较.

但是,在尝试对数字进行散列时,散列总是与创建数据库行时使用的散列不同(使用VB.NET和SQL Server 2008 R2).例如,如果数据库中的CC编号恰好是4444333322221111,则.NET生成的哈希值将变为xU6sVelMEme0N8aEcCKlNl5cG25kl8Mo5pzTowExenM =.

但是,当我找到Javascript使用任何SHA-256哈希库时,产生的哈希将始终为NbjuSagE7lHVQzKSZG096bHtQoMLscYAXyuCXX0Wtw0 =.

我假设这是某种Unicode/UTF-8问题,但无论我尝试什么,我都无法得到相同的哈希,它开始让我发疯.有人可以提供任何建议吗?

这可能会提供一些见解.请访问http://www.insidepro.com/hashes.php?lang=eng并在密码框中插入不带引号的"4444333322221111".然后,向下滚动到SHA-256部分.

您可以看到有四个结果,其中两个是我发布的哈希码(第二个从顶部是Javascript哈希,最下面一个是SQL哈希).根据该页面,底部哈希结果使用base 64字符串生成,并将密码设置为unicode格式.

我已经对此进行了调查并尝试了许多不同的函数来将密码编码为unicode格式,但无论我尝试什么小调整或我做的其他函数,我都无法得到它来匹配我需要的哈希码.

我目前正在研究在服务器端调用SHA-256函数时使用的参数.

更新:

所以为了确保我没有疯狂,我在调试时运行了我用于立即窗口中CC编号的Hash方法.同样,结果与以前一样.你可以在这里看到截图:http://i.imgur.com/raEyX.png

javascript sql-server hash sha256

7
推荐指数
1
解决办法
6339
查看次数

如何在node.js中检查ASP.NET密码哈希

首先,我使用SHA256和.NET/Node.js读取了这个Hashing密码,它对我没有帮助.

我必须验证在node.js环境中在ASP.NET中创建的密码哈希.我被告知使用此算法生成密码:ASP.NET成员资格使用的默认哈希算法是什么?.

我有示例密码哈希和盐(第一行是密码,第二行是盐):

"Password": "jj/rf7OxXM263rPgvLan4M6Is7o=",
"PasswordSalt": "/Eju9rmaJp03e3+z1v5s+A==",
Run Code Online (Sandbox Code Playgroud)

我知道哈希算法是SHA1,我知道上面的哈希是为输入生成的test123.但是我不能重现散列算法来为此输入获取相同的散列.我尝试了什么:

Password = "jj/rf7OxXM263rPgvLan4M6Is7o="
PasswordSalt = "/Eju9rmaJp03e3+z1v5s+A=="
crypto = require("crypto")
sha1 = crypto.createHash("sha1")
PasswordSalt = new Buffer(PasswordSalt, 'base64').toString('utf8')
sha1.update(PasswordSalt+"test123", "utf8")
result = sha1.digest("base64")
console.log(Password)
console.log(result)
Run Code Online (Sandbox Code Playgroud)

结果是:

jj/rf7OxXM263rPgvLan4M6Is7o=
xIjxRod4+HVYzlHZ9xomGGGY6d8=
Run Code Online (Sandbox Code Playgroud)

我能够得到C#算法:

using System.IO;
using System;
using System.Text;
using System.Security.Cryptography;

class Program
{

    static string EncodePassword(string pass, string salt)
    {
        byte[] bytes = Encoding.Unicode.GetBytes(pass);
        byte[] src = Convert.FromBase64String(salt);
        byte[] dst = new byte[src.Length + bytes.Length];
        Buffer.BlockCopy(src, …
Run Code Online (Sandbox Code Playgroud)

asp.net algorithm hash node.js

6
推荐指数
2
解决办法
1767
查看次数