如何在Node.js中检查密码,来自AspNetUsers .net core



我有一个在.net core网站中使用的数据库,现在我需要检查使用节点js登录如何在node.js中检查密码哈希,我找到了一个函数来做到这一点,但不适用于.net核心AspNetUsers,仅在最后 asp.net<</p>

div class="one_answers"中这样做>

如这篇文章:JavaScript:如何像C#一样生成Rfc2898DeriveBytes?

但是对于.NET Core需要更改,因为在.NET Core ^1中进行哈希处理使用v3,因此代码应更改为:

// The value stored in [dbo].[AspNetUsers].[PasswordHash]
    const hashedPwd =   "AQAAAAEAACcQAAAAENX1Hdhgta05DYzYzVOI5kfv1mM0oc2OCIF8tKvNZeSTMWoczGZk+6yy9DMWtLeVQQ==";
    const hashedPasswordBytes = new Buffer(hashedPwd, 'base64');        
    const hexChar = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
    let salt_string = "";
    let storedSubKeyString = "";
    // build strings of octets for the salt and the stored key
    for (let i = 1; i < hashedPasswordBytes.length; i++) {
        if (i > 12 && i <= 28) {
            salt_string += hexChar[(hashedPasswordBytes[i] >> 4) & 0x0f] + hexChar[hashedPasswordBytes[i] & 0x0f]
        }
        if (i > 0 && i > 28) {
            storedSubKeyString += hexChar[(hashedPasswordBytes[i] >> 4) & 0x0f] + hexChar[hashedPasswordBytes[i] & 0x0f];
        }
    }
    // password provided by the user        
    const password = 'password';       
    var nodeCrypto = crypto.pbkdf2Sync( 
            new Buffer(password), 
            new Buffer(salt_string, 'hex'), 10000, 256, 'SHA256');

    var derivedKeyOctets = nodeCrypto.toString('hex').toUpperCase();

    if (derivedKeyOctets.indexOf(storedSubKeyString) === 0) {
        return "passwords match!";
    } else {
        return "passwords DO NOT match!";
    }

node-password-hash(虽然它已被弃用)是一个简单/伟大的模块,它将通过简单的步骤为您完成密码哈希。

它还提供用于生成散列密码和根据散列密码验证纯文本密码的函数。除此之外,作为额外的安全措施,在对密码进行哈希处理时会生成随机盐。散列密码是所使用的加密算法和盐的组合,因此您所要做的就是验证纯文本密码是否是散列密码本身。

希望这有帮助!

最新更新