Skip to main content

Node.js Crypto 及 MD5 加密

一、Crypto 加密

1、什么是 Crypto

Crypto 加密模块是 C/C++ 实现这些算法后,暴露为 JS 接口的模块,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。

2、数据加密与解密

crypto.createCipheriv(algorithm, key, iv):使用给定的 algorithm、key 和初始化向量(iv)创建并返回 Cipher 对象。参数如下:

  • algorithm:指定算法,依赖于 OpenSSL,例如 'aes192' 等;
  • keyalgorithm 使用的原始密钥,与选择的算法有关,比如 aes128、aes192、aes256,长度分别是 128、192、256 位(对应 16、24、32 字节)
  • iv:初始化向量,都是 128 位(对应 16 字节)

数据解密则用 crypto.createDecipheriv(algorithm, key, iv),参数与加密函数相同。

3、使用示例

const crypto = require('crypto');
const algorithm = 'aes192';
const key = crypto.randomBytes(192 / 8);
const iv = crypto.randomBytes(128 / 8);

// 加密函数
const encrypt = (text) => {
const cipher = crypto.createCipheriv(algorithm, key, iv);
cipher.update(text);
return cipher.final('hex');
}

// 解密函数
const decrypt = (encrypted) => {
const decipher = crypto.createDecipheriv(algorithm, key, iv);
decipher.update(encrypted, 'hex');
return decipher.final('utf8');
}

点击查看在项目中的应用

二、MD5 加密

1、什么是 MD5

MD5(Message-Digest Algorithm)是计算机安全领域广泛使用的散列函数(又称哈希算法、摘要算法),主要用来确保消息的完整和一致性,是让大容量信息在数字签名软件签署私人秘钥前被 “压缩” 成一种保密格式,也就是把一个任意长度的字节串变换成一定长度的十六进制数字串(32个字符) 一致性验证。

常见的应用场景有密码保护、下载文件校验等。

2、使用示例

const crypto = require('crypto');

// 密钥(需要保密)
const SECRET_KEY = 'leophen_0810#'

// 加密函数
const md5 = (text) => {
const md5 = crypto.createHash('md5')
return md5.update(`password=${text}&key=${SECRET_KEY}`).digest('hex')
}

module.exports = {
md5
}

在项目中用法与上述 Crypto 相同。