您当前的位置: 首页 >  Java

彭世瑜

暂无认证

  • 0浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JavaScript加密-MD5与Bcrypt

彭世瑜 发布时间:2020-03-09 10:19:06 ,浏览量:0

哈希(Hash, 消息摘要)是将目标文本转换成具有相同长度的、不可逆的杂凑字符串 加密(Encrypt)是将目标文本转换成具有不同长度的、可逆的密文 在这里插入图片描述

图片来源:https://www.cnblogs.com/leoo2sk/archive/2010/10/01/hash-and-encrypt.html

MD5
// npm install js-md5
const md5 = require('js-md5');

console.log(md5("123456"));
// e10adc3949ba59abbe56e057f20f883e

Bcrypt
  1. 对同一个密码,每次生成的hash不一样,但是hash中包含了salt
  2. 在下次校验时,从hash中取出salt,salt跟password进行hash
  3. 得到的结果跟保存在DB中的hash进行比对。

// npm install bcrypt
const bcrypt = require('bcrypt');

const saltRounds = 10;
const password = '123456';

// 生成salt
const salt = bcrypt.genSaltSync(saltRounds);
console.log(salt);
// $2b$10$qxOMtiYuTR.sKUOpGIU9Eu

// 加密
const hash = bcrypt.hashSync(password, salt);
console.log(hash);
// $2b$10$qxOMtiYuTR.sKUOpGIU9EugT6MjkNnrmYyjEYDD9ahIWad2esdPya

// 校验
console.log(bcrypt.compareSync(password, hash)); // true);
// true

加密后的格式一般为: 在这里插入图片描述

$2a$10$/bTVvqqlH9UiE0ZJZ7N2Me3RIgUCdgMheyTgV0B4cMCSokPa.6oCa

其中:

  1. $是分割符,无意义;
  2. 2a是bcrypt加密版本号;
  3. 10是cost的值;
  4. 而后的前22位是salt值;
  5. 再然后的字符串就是密码的密文了。
总结

Bcrypt生成的密文是60位的。而MD5的是32位的。 Bcrypt的破解成本更高。

参考 算法高级(22)-BCrypt加密算法,号称目前最安全的算法之一

关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.1393s