本文详细介绍在Node.js和前端JavaScript中实现AES加密的方法。Node.js部分利用内置crypto模块,演示如何配置AES-256-ECB模式及PKCS7填充;前端部分则介绍引入Crypto-js库,通过封装好的API完成加解密操作。内容涵盖密钥长度要求、IV处理及具体代码示例,适用于需要数据对称加密的场景。
AES加密简介
一、简介
AES加密,全称为Rijndael加密法,是美国联邦政府采用的区块加密标准。该标准旨在替代原有的DES算法,经过多方分析与验证,已在全球范围内得到广泛应用。目前,高级加密标准(AES)已成为对称密钥加密领域中最主流的算法之一。
AES规范规定区块长度固定为128比特,而密钥长度支持128、192或256比特三种选项。相比之下,Rijndael算法允许的密钥和区块长度可以是32位的整数倍,范围介于128位至256位之间。常见的AES工作模式包括AES-ECB、AES-CBC、AES-CTR、AES-OFB以及AES-CFB。
本文主要聚焦于常用的ECB工作模式,并结合pkcs7padding填充方式(其数值与pkcs5padding相同)进行加密演示。
二、应用
Node.js AES加密实现
1. Node.js中的AES实现
Node.js核心代码
var crypto = require('crypto');
var aesutil = module.exports = {};
/**
* aes加密
* @param data 待加密内容
* @param key 必须为32位私钥
* @returns {string}
*/
aesutil.encryption = function (data, key, iv) {
iv = iv || "";
var clearEncoding = 'utf8';
var cipherEncoding = 'base64';
var cipherChunks = [];
var cipher = crypto.createCipheriv('aes-256-ecb', key, iv);
cipher.setAutoPadding(true);
cipherChunks.push(cipher.update(data, clearEncoding, cipherEncoding));
cipherChunks.push(cipher.final(cipherEncoding));
return cipherChunks.join('');
}
/**
* aes解密
* @param data 待解密内容
* @param key 必须为32位私钥
* @returns {string}
*/
aesutil.decryption = function (data, key, iv) {
if (!data) {
return "";
}
iv = iv || "";
var clearEncoding = 'utf8';
var cipherEncoding = 'base64';
var cipherChunks = [];
var decipher = crypto.createDecipheriv('aes-256-ecb', key, iv);
decipher.setAutoPadding(true);
cipherChunks.push(decipher.update(data, cipherEncoding, clearEncoding));
cipherChunks.push(decipher.final(clearEncoding));
return cipherChunks.join('');
}
JavaScript前端AES实现
2. JavaScript中的AES实现
需下载第三方库Crypto-js.js,获取地址为:https://github.com/brix/crypto-js
引入src目录下的crypto-js.js文件后,加密代码实现如下:
Crypto-js使用示例
var key = "12345678" //秘钥必须为:8/16/32位
var message = "123456";
//加密
var encrypt = CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(key), {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log("value: "+encrypt);
//解密
var decrypt = CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(key), {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log("value: "+decrypt.toString(CryptoJS.enc.Utf8));
原文作者:西安.王磊 原文出处:http://vipstone.cnblogs.com/
以上就是本文的全部内容,希望对读者的学习有所帮助。