Node.js与JavaScript中AES加密实现详解

作者:栖木

时间:2026-10-30

浏览:634

本文详细介绍在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/

以上就是本文的全部内容,希望对读者的学习有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章