NodeJs内置模块之crypto

371 阅读2分钟

NodeJs内置模块-crypto

第一部分介绍一个库pngQuant

pngquant 是一个用于压缩 PNG 图像文件的工具。它可以显著减小 PNG 文件的大小,同时保持图像质量和透明度。通过减小文件大小,可以提高网页加载速度,并节省存储空间。pngquant 提供命令行接口和库,可轻松集成到各种应用程序和脚本中。 pngquant官网

概念

crypto是用来加密的,再JavaScript中像一些库md5等,nodejs底层的libuiv层是通过c/c++来实现的,所以这个模块是node底层封装后暴露给js去调用的,这样运行速度会非常快,提高效率。

const crypto = require('node:crypto')// 引入模块//接受三个参数
//第一个参数:算法名称
//第二个参数:key
//第三个参数:iv-初始化向量---保证每一个生成的密文都是不一样的const key = crypto.randomBytes(32)//生成一个随机的 32 字节的密钥
const iv = Buffer.from(crypto.randomBytes(16))//生成一个随机的 16 字节的初始化向量 (IV)const Cipher = crypto.createCipheriv('aes-256-cbc', key, iv)
​
// 对输入数据进行加密,并输出加密结果的十六进制表示
Cipher.update("小阿俊", "utf-8", "hex");
const result = Cipher.final("hex");
​
console.log(result);//0b90c429da8c344528f6982269b225dc//解密-用相同的key和相同的iv去解密
const de = crypto.createDecipheriv('aes-256-cbc', key, iv)
de.update(result, 'hex', 'utf-8')
console.log(de.final().toString('utf-8'));//小阿俊

哈希函数--常用的MD5加密、SHA-256

特点:

  • 输出的长度固定,不管输入大小
  • 不可逆的,只能加密,无法解密
  • 唯一性,只要算法相同,永远加密得到的串都是一样的
//解密-用相同的key和相同的iv去解密
const de = crypto.createDecipheriv('aes-256-cbc', key, iv)
de.update(result, 'hex', 'utf-8')
console.log(de.final().toString('utf-8'));//小阿俊
​
​
//哈希函数
let hash = crypto.createHash('md5')
hash.update('123456')
//以十六进制输出
console.log(hash.digest().toString('hex')); //e10adc3949ba59abbe56e057f20f883e