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' 等;key
:algorithm 使用的原始密钥,与选择的算法有关,比如 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
相同。