Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js密码哈希_Node.js_Security_Cryptography_Passwords_Password Hash - Fatal编程技术网

Node.js密码哈希

Node.js密码哈希,node.js,security,cryptography,passwords,password-hash,Node.js,Security,Cryptography,Passwords,Password Hash,我目前正在使用以下方法对密码进行哈希运算: var pass_shasum = crypto.createHash('sha256').update(req.body.password).digest('hex'); 你能提出改进建议使项目更安全吗?我使用下面的代码来加密和散列密码 var bcrypt = require('bcrypt'); exports.cryptPassword = function(password, callback) { bcrypt.genSalt(1

我目前正在使用以下方法对密码进行哈希运算:

var pass_shasum = crypto.createHash('sha256').update(req.body.password).digest('hex');

你能提出改进建议使项目更安全吗?

我使用下面的代码来加密和散列密码

var bcrypt = require('bcrypt');

exports.cryptPassword = function(password, callback) {
   bcrypt.genSalt(10, function(err, salt) {
    if (err) 
      return callback(err);

    bcrypt.hash(password, salt, function(err, hash) {
      return callback(err, hash);
    });
  });
};

exports.comparePassword = function(plainPass, hashword, callback) {
   bcrypt.compare(plainPass, hashword, function(err, isPasswordMatch) {   
       return err == null ?
           callback(null, isPasswordMatch) :
           callback(err);
   });
};

bcrypt也可以同步调用。咖啡脚本示例:

bcrypt = require('bcrypt')

encryptionUtil = 
    encryptPassword: (password, salt) ->
        salt ?= bcrypt.genSaltSync()
        encryptedPassword = bcrypt.hashSync(password, salt)
        {salt, encryptedPassword}

    comparePassword: (password, salt, encryptedPasswordToCompareTo) ->
        {encryptedPassword} = @encryptPassword(password, salt)
        encryptedPassword == encryptedPasswordToCompareTo

module.exports = encryptionUtil

此外,还有用于节点的bcrypt nodejs模块


之前我使用了这里已经提到的bcrypt模块,但在win7 x64上遇到了问题。另一方面,bcrypt nodejs是bcrypt的纯JS实现,没有任何依赖关系。

您可以使用bcrypt JS包加密密码

  • 尝试npm i bcryptjs
  • varbcrypt=require('bcryptjs')位于顶部
  • 要散列密码,请执行以下操作:
  • bcrypt.genSalt(10,函数(err,salt){
    bcrypt.hash(“B4c0/\/”,salt,函数(err,hash){
    //将哈希存储在密码数据库中。
    });
    });
    
  • 要检查您的密码
  • //从密码数据库加载哈希。
    bcrypt.compare(“B4c0/\/”,散列,函数(err,res){
    //res==true
    });
    

    您可以访问以了解有关bcryptjs的更多信息。

    尝试使用Bcrypt,它使用哈希来保护密码

    bcrypt.hash(req.body.password,salt,(err,encrypted)=>{
    user.password=已加密
    下一个()
    })
    
    其中salt是指定哈希强度的成本值。 登录时,使用bcrypt.compare方法比较密码:

    bcrypt.compare(密码,user.password,(err,same)=>{
    如果(相同){
    req.session.userId=user.\u id
    res.redirect(“/bloglist”)
    }否则{
    res.end('传递错误')
    }
    })
    

    有关更多信息,请参阅本博客:

    Bcrypt不是一个坏选择,但是:

  • 它将截断
    NUL
    字节
  • 它将在72个字符后截断。如果您使用的是密码短语,这可能会意外地削弱您的密码
  • 截至2019年10月,是最佳选择

    与Argon2id接口的首选方式是通过libnaid(一个提供许多特性的加密库)。有几种绑定可供选择,但最简单的可能是

    Github上的包括密码散列和存储

    带typescript的bcrypt

    npm i bcrypt
    npm i -D @types/bcrypt
    
    例如:加密

    const myEncryptPassword = await Encrypt.cryptPassword(password);
    
    例:比较

    const myBoolean = await Encrypt.comparePassword(password, passwordHash);
    

    不加盐的SHA是不安全的。使用bcrypt。谢谢你的评论,我会接受你的检查。关于保护密码的好文章每个开发人员都应该阅读:返回后不要使用其他密码,这根本没有意义。干杯您是否可以添加一个指向您正在使用的bcrypt库的链接(如果可能的话是github)?谢谢。@Tadej那是很久以前的事了,但我想是:谢谢。我甚至没有查日期。对不起/有两个模块,为了这个目的,如果有人能告诉更多关于这两个模块的信息,那将是很好的。这将是很好的,但不再维护。
    const myEncryptPassword = await Encrypt.cryptPassword(password);
    
    const myBoolean = await Encrypt.comparePassword(password, passwordHash);