NodeJS 如何使用加密创建随机盐散列

ryhaxcpt  于 2023-03-07  发布在  Node.js
关注(0)|答案(2)|浏览(119)

我想使用node.js crypto lib创建一个salt-hash,而不必解析任何硬编码的数据。
硬编码是什么意思?

var salt, hardcodedString = "8397dhdjhjh";
crypto.createHmac('sha512', hardcodedString).update(salt).digest("base64");

有没有其他方法可以创建一个随机字符串,而不使用原始的javascript,随机函数或硬编码的东西?
问候

    • 更新**
var Crypto = require('crypto')
    , mongoose = require('mongoose');

module.exports = mongoose.model('User', new mongoose.Schema({
    username: {
        type: String
        , required: true
        , index: { unique: true, sparse: true }
        , set: toLower
    },
    email: {
        type: String
        , required: true
        , index: { unique: true, sparse: true }
        , set: toLower
    },
    salt: {
        type: String
        , set: generateSalt
    },
    password: {
        type: String
        , set: encodePassword
    }
}),'Users');

function toLower(string) {
    return string.toLowerCase();
}

function generateSalt() {
    //return Math.round((new Date().valueOf() * Math.random())) + '';
    Crypto.randomBytes('256', function(err, buf) {
        if (err) throw err;
        return buf;
    });
    // return Crypto.randomBytes('256'); // fails to
}

function encodePassword(password) {
    return password;
    // TODO: setter has no access to this.salt
    //return Crypto.createHmac('sha512', salt).update(password).digest("base64");
}

function authenticate(plainPassword) {
    return encodePassword(plainPassword) === this.password;
}
ohfgkhjo

ohfgkhjo1#

快速浏览一下文档就会发现crypto.randomBytes函数。

var buf = crypto.randomBytes(16);

返回一个包含原始字节的缓冲区。如果你想要一个字符串,你可以使用toString('base64')toString('hex')

x4shl7ld

x4shl7ld2#

您可以通过在节点REPL上运行来执行此操作

node
Welcome to Node.js v16.19.0.
Type ".help" for more information.
> crypto.randomBytes(16).toString('base64')

相关问题