nodeJS:MD5加密

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');

推荐阅读更多精彩内容