如何从AspNetUsers.net核心中检查node.js中的密码

我有一个在.net核心网站中使用的数据库,现在我需要检查与节点jslogin如何检查密码哈希在node.js,我发现这样做的function ,但不适用于。NET核心AspNetUsers,只做在最后的asp.net

作为这篇文章: JavaScript:如何生成像C#Rfc2898DeriveBytes?

但.net核心需要改变,因为在.net核心^ 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!"; } 

节点密码散列 (虽然它已被弃用)是一个简单/伟大的模块,这将使您轻松完成密码散列。

它还提供了生成哈希密码和根据哈希密码validation纯文本密码的function。 除此之外,作为附加的安全措施,密码被散列时会产生随机盐。 哈希密码是使用encryptionalgorithm和盐的组合,所以你只需要validation一个纯文本密码就是哈希密码本身。

希望这可以帮助!