详解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异步回调的优雅处理方法
Sep 25 NodeJs
nodejs教程之入门
Nov 21 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 NodeJs
nodejs+express最简易的连接数据库的方法
Dec 23 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
把77A收信机改造成收音机
2021/03/02 无线电
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
php提交表单时保留多个空格及换行的文本样式的方法
2017/06/20 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
深入理解javascript中的this
2021/02/08 Javascript
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
python urllib爬虫模块使用解析
2019/09/05 Python
python实现超级马里奥
2020/03/18 Python
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
J2EE面试题
2016/03/14 面试题
数控专业毕业生求职信范文
2013/09/21 职场文书
计算机应用毕业生自荐信
2013/10/23 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
给朋友的道歉短信
2015/05/12 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python
java executor包参数处理功能 
2022/02/15 Java/Android
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技