MD5
- md5:不是一种加密算法,是用来做文件校验的
- 作用:让大容量信息在数字签名软件签署私人秘钥前被"压缩"成一种保密格式,也就是把一个任意长度的字节串变换成一定长度的十六进制数字串(32个字符)
- 特点:不可逆
- 输入两个不同的明文不会得到相同的输出值
- 根据输出值,不能得到原始的明文,即过程不可逆
MD5的性质
- 压缩性:任意长度的数据,转换为固定长度的MD5值
- 容易计算:从原数据计算出MD5值很容易
- 抗修改:对原数据进行任何改动,最终得到的MD5值都有很大的区别
- 弱抗碰撞:已知原数据和其MD5值,找一个具有相同MD5值的数据(即伪造数据)是非常困难的。
HMAC
- 进一步提升MD5加密安全性
- 是一个"秘钥",对明文进行加密,并做"两次散列",但使用它得到的还是32个字符
- 用HMAC
- 利用哈希算法,以一个秘钥和一个信息为输入,生成一个消息摘要作为输出
nodeJS中的crypto
- crypto.createHash() : 创建一个Hash实例,不能使用new关键字创建对象
- hash.update()
- hash.digest()
- create.createHmac() : 创建一个Hmac实例,不能使用new关键字创建对象
- hmac.update()
- hmac.digest()
crypto.createHash()
// 必须引入crypto
const crypto = require('crypto');
function md5(data){
// 以md5的格式创建一个哈希值
let hash = crypto.createHash('md5');
return hash.update(data).digest('base64');
}
let mima = md5(md5('dandan')+'li'));
crypto.createHmac()
// 必须引入crypto
const crypto = require('crypto');
function hmac(data){
let hmac = crypto.createHmac('md5','后台传入/任意值');
return hmac.update(data).digest('base64');
}
let mima = hmac('dandan');