JavaScript利用crypto模块实现加解密的完整攻略,包含以下步骤:
1. 引入crypto模块
在Node.js中,使用crypto模块来实现加解密操作。可以使用以下代码引入crypto模块:
const crypto = require('crypto');
2. 生成密钥
在加解密过程中,需要使用密钥来实现加密和解密操作。可以使用crypto模块提供的crypto.randomBytes()
方法生成随机密钥。以下代码生成一个16字节的随机密钥:
const key = crypto.randomBytes(16);
3. 加密数据
加密操作可以使用crypto.createCipheriv()
方法,该方法需要传入算法、密钥、初始向量等参数。以下示例代码使用AES-128-CBC算法加密数据:
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
let encrypted = cipher.update('需要加密的数据', 'utf8', 'hex');
encrypted += cipher.final('hex');
4. 解密数据
解密操作可以使用crypto.createDecipheriv()
方法,该方法需要传入算法、密钥、初始向量等参数。以下示例代码使用AES-128-CBC算法解密数据:
const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
在解密数据之前,需要使用加密时使用的初始向量iv
。
示例说明1:文件加密
以下示例代码可以实现对文件的加密和解密操作:
const fs = require('fs');
const crypto = require('crypto');
// 生成随机密钥
const key = crypto.randomBytes(16);
// 生成随机初始向量
const iv = crypto.randomBytes(16);
// 加密文件
function encryptFile(inputPath, outputPath, key, iv) {
const readStream = fs.createReadStream(inputPath);
const writeStream = fs.createWriteStream(outputPath);
const cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
readStream.pipe(cipher).pipe(writeStream);
writeStream.on('close', function() {
console.log('Encrypt success!');
});
}
// 解密文件
function decryptFile(inputPath, outputPath, key, iv) {
const readStream = fs.createReadStream(inputPath);
const writeStream = fs.createWriteStream(outputPath);
const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
readStream.pipe(decipher).pipe(writeStream);
writeStream.on('close', function() {
console.log('Decrypt success!');
});
}
// 使用示例
const inputFile = 'test.txt';
const encryptedFile = 'test.txt.encrypted';
const decryptedFile = 'test_decrypted.txt';
// 加密文件
encryptFile(inputFile, encryptedFile, key, iv);
// 解密文件
decryptFile(encryptedFile, decryptedFile, key, iv);
示例说明2:字符串加密
以下示例代码可以实现对字符串的加密和解密操作:
const crypto = require('crypto');
// 生成随机密钥
const key = crypto.randomBytes(16);
// 生成随机初始向量
const iv = crypto.randomBytes(16);
// 字符串加密
function encryptString(str, key, iv) {
const cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
let encrypted = cipher.update(str, 'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
}
// 字符串解密
function decryptString(str, key, iv) {
const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
let decrypted = decipher.update(str, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
// 使用示例
const originalString = 'This is a secret message';
// 加密字符串
const encryptedString = encryptString(originalString, key, iv);
console.log(`Encrypted string: ${encryptedString}`);
// 解密字符串
const decryptedString = decryptString(encryptedString, key, iv);
console.log(`Decrypted string: ${decryptedString}`);
以上便是使用crypto模块实现JavaScript加解密的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript利用crypto模块实现加解密 - Python技术站