使用crypto模块为通信数据添加加密保护
- 引入crypto模块:在Node.js中,首先需要引入
crypto
模块。
const crypto = require('crypto');
- 选择加密算法:
crypto
模块支持多种加密算法,如aes - 256 - cbc
、des - cbc
等。
- 生成密钥和初始化向量(IV):对于某些加密模式(如CBC),需要初始化向量。密钥长度要与所选算法匹配。
const key = crypto.randomBytes(32); // 256 - bit key for aes - 256 - cbc
const iv = crypto.randomBytes(16); // 128 - bit iv for aes - 256 - cbc
- 加密数据:使用
createCipheriv
方法创建加密器,然后更新并最终完成加密。
function encrypt(text) {
const cipher = crypto.createCipheriv('aes - 256 - cbc', key, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
}
- 解密数据:使用
createDecipheriv
方法创建解密器,同样更新并最终完成解密。
function decrypt(encryptedText) {
const decipher = crypto.createDecipheriv('aes - 256 - cbc', key, iv);
let decrypted = decipher.update(encryptedText, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
常用加密算法及其应用场景
- AES(高级加密标准)
- 常用模式:
aes - 128 - cbc
、aes - 256 - cbc
、aes - 256 - gcm
等。
- 应用场景:广泛用于数据传输和存储加密,如网络通信中的敏感信息(登录密码、信用卡号等)加密,以及文件加密。例如,在Node.js开发的API服务中,对用户密码传输进行加密。
- DES(数据加密标准)
- 常用模式:
des - cbc
等。
- 应用场景:曾经广泛应用于金融等领域,但由于其密钥长度较短(56位),安全性逐渐降低,如今较少使用。不过在一些旧系统兼容性需求下仍可能会出现。
- RSA
- 特点:非对称加密算法,使用公钥加密,私钥解密。
- 应用场景:主要用于密钥交换和数字签名。例如,在HTTPS握手过程中用于交换对称加密密钥,以及在数字证书系统中用于验证证书的真实性。在Node.js中,可以使用
crypto
模块生成RSA密钥对,并进行加密和解密操作。