JavaScript加密-MD5与Bcrypt
【摘要】 哈希(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
- 对同一个密码,每次生成的hash不一样,但是hash中包含了salt
- 在下次校验时,从hash中取出salt,salt跟password进行hash
- 得到的结果跟保存在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
其中:
- $是分割符,无意义;
- 2a是bcrypt加密版本号;
- 10是cost的值;
- 而后的前22位是salt值;
- 再然后的字符串就是密码的密文了。
总结
Bcrypt生成的密文是60位的。而MD5的是32位的。
Bcrypt的破解成本更高。
文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。
原文链接:pengshiyu.blog.csdn.net/article/details/104746954
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)