JavaScript加密-MD5与Bcrypt

举报
彭世瑜 发表于 2021/08/13 23:56:13 2021/08/13
【摘要】 哈希(Hash, 消息摘要)是将目标文本转换成具有相同长度的、不可逆的杂凑字符串 加密(Encrypt)是将目标文本转换成具有不同长度的、可逆的密文 图片来源:https://www.cnblogs.com/leoo2sk/archive/2010/10/01/hash-and-encrypt.html MD5 // npm install js-md...

哈希(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


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

$2a$10$/bTVvqqlH9UiE0ZJZ7N2Me3RIgUCdgMheyTgV0B4cMCSokPa.6oCa

  
 
  • 1

其中:

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

总结

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

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

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/104746954

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。