详解nodejs与javascript中的aes加密


Posted in NodeJs onMay 22, 2016

一、简介

1.aes加密简单来说,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。高级加密标准已然成为对称密钥加密中最流行的算法之一。

2.AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB。

3.在这里我们只接受常用的ECB方式 + pkcs7padding(与pkcs5padding值相同)填充加密。 

二、应用

1.nodejs中aes的使用

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('');
}

2.javascript中aes的使用

下载第三方库Crypto-js.js git地址:https://github.com/brix/crypto-js

引入src下的crypto-js.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/

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

NodeJs 相关文章推荐
nodejs教程 安装express及配置app.js文件的详细步骤
May 11 NodeJs
NodeJS学习笔记之网络编程
Aug 03 NodeJs
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
详解Nodejs之静态资源处理
Jun 05 NodeJs
nodejs密码加密中生成随机数的实例代码
Jul 17 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
NodeJS搭建HTTP服务器的实现步骤
Oct 12 NodeJs
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
Apr 29 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
NodeJS连接MongoDB数据库时报错的快速解决方法
May 13 #NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 #NodeJs
Nodejs学习item【入门手上】
May 05 #NodeJs
NodeJS的Promise的用法解析
May 05 #NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 #NodeJs
Nodejs Stream 数据流使用手册
Apr 17 #NodeJs
NodeJS创建基础应用并应用模板引擎
Apr 12 #NodeJs
You might like
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
javascript新手语法小结
2008/06/15 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
JS前端加密算法示例
2016/12/22 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
webpack4简单入门实例
2018/09/06 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
Python中的zipfile模块使用详解
2015/06/25 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
Python之时间和日期使用小结
2019/02/14 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
《再见了,亲人》教学反思
2014/02/26 职场文书
诚信考试承诺书
2014/03/27 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
预备党员党支部意见
2015/06/02 职场文书
公司宣传语大全
2015/07/13 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
自信主题班会
2015/08/14 职场文书
2015年库房管理工作总结
2015/10/14 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
一文搞懂php的垃圾回收机制
2021/06/18 PHP
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技