📅  最后修改于: 2023-12-03 15:03:15.102000             🧑  作者: Mango
在 Node.js 中,有一个官方的加密模块 crypto
可以用来进行常用的加密操作,例如哈希、对称加密、非对称加密等。
哈希是一种将任意长度的消息压缩为固定长度摘要的方法。Node.js 提供了多种哈希函数,例如 MD5、SHA256 等。下面是一个使用 SHA256 哈希函数计算摘要的例子:
const crypto = require('crypto');
const message = 'hello world';
const hash = crypto.createHash('sha256').update(message).digest('hex');
console.log(hash); // 输出:d2ddea18f00665ce8620d1ab2a84c0c23c68a1d9f84c4f11de1e2bfdcf728185
| 算法 | 返回长度 |
| --- | --- |
| md5
| 128 bits |
| sha1
| 160 bits |
| sha256
| 256 bits |
| sha512
| 512 bits |
对称加密是指使用相同的密钥进行加密和解密的方法。Node.js 中提供了多种对称加密算法,例如 AES、DES、3DES 等。下面是一个使用 AES 对称加密算法加密解密数据的例子:
const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);
function encrypt(message) {
const cipher = crypto.createCipheriv(algorithm, key, iv);
let encrypted = cipher.update(message, 'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
}
function decrypt(message) {
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(message, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
const message = 'hello world';
const encryptedMessage = encrypt(message);
console.log(encryptedMessage);
const decryptedMessage = decrypt(encryptedMessage);
console.log(decryptedMessage); // 输出:hello world
非对称加密是指使用一对密钥进行加密和解密的方法,这对密钥通常称为公钥和私钥。Node.js 中提供了多种非对称加密算法,例如 RSA、DSA 等。下面是一个使用 RSA 非对称加密算法加密解密数据的例子:
const crypto = require('crypto');
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
});
function encrypt(message) {
const buffer = Buffer.from(message);
const encrypted = crypto.publicEncrypt(publicKey, buffer);
return encrypted.toString('base64');
}
function decrypt(encryptedMessage) {
const buffer = Buffer.from(encryptedMessage, 'base64');
const decrypted = crypto.privateDecrypt(privateKey, buffer);
return decrypted.toString('utf8');
}
const message = 'hello world';
const encryptedMessage = encrypt(message);
console.log(encryptedMessage);
const decryptedMessage = decrypt(encryptedMessage);
console.log(decryptedMessage); // 输出:hello world
以上是 crypto
模块的一些常用用法,更多详细的说明可以查看 Node.js 官方文档。