JavaScript实现的前端AES加密解密功能【基于CryptoJS】


Posted in Javascript onAugust 28, 2018

本文实例讲述了JavaScript实现的前端AES加密解密功能。分享给大家供大家参考,具体如下:

js前端AES加密

最近由于项目需求做了一次MITM,突然即使发现使用HTTPS,也不能保证数据传输过程中的安全性。 通过中间人攻击,可以直接获取到Http协议的所有内容。 于是开始尝试做一些简单的加密,在一定程度上保证安全性。

本次采用AES加密数据,所以客户端和服务端使用的相同秘钥。(仅作为演示,正式环境推荐使用RSA)

首先准备一份明文密码和加密使用的KEY

var source = "ABCDEFG";
var aesKey = "8NONwyJtHesysWpM";

JS加密 padding和mode 需要与服务端相对应,否则无法解密

key 为字符串类型,需要处理完再使用

注:PKCS5Padding PKCS7Padding 是一样的

上段所示的 encryptedData 即为加密后的结果。

JS解密代码

encryptedData 为加密后的数据,
直接通过JS加密后的数据是一个对象,无法直接解密的, 需要转换为Base64的字符串后才可解密
服务端应当返回Base64之后的加密数据

encryptedData = encryptedData.ciphertext.toString();
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedData);

先来看看运行结果:

 JavaScript实现的前端AES加密解密功能【基于CryptoJS】

aes.js文件可点击此处本站下载

完整测试代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>3water.com aes.js</title>
</head>
<script src="aes.js"></script>
<body>
<script>
  var key = CryptoJS.enc.Utf8.parse("8NONwyJtHesysWpM");
  var plaintText = 'ABCDEFGH'; // 明文
  var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });
  console.log("加密前:"+plaintText);
  console.log("加密后:"+encryptedData);
  encryptedData = encryptedData.ciphertext.toString();
  var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedData);
  var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
  var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });
  var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);
  console.log("解密后:"+decryptedStr);
   var pwd = "PCsUFtgog9/qpqmqXsuCRQ==";
  //加密服务端返回的数据
  var decryptedData = CryptoJS.AES.decrypt(pwd, key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });
  console.log("解密服务端返回的数据:"+decryptedStr);
</script>
</body>
</html>

代码中带入aes.js完整代码,使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun,可得到上述运行结果。

Javascript 相关文章推荐
JS日历 推荐
Dec 03 Javascript
js 提交和设置表单的值
Dec 19 Javascript
JQuery实现用户名无刷新验证的小例子
Mar 22 Javascript
吐槽一下我所了解的Node.js
Oct 08 Javascript
js获取客户端操作系统类型的方法【测试可用】
May 27 Javascript
js 截取或者替换字符串中的数字实现方法
Jun 13 Javascript
jQuery实现移动端Tab选项卡效果
Mar 15 Javascript
windows下vue.js开发环境搭建教程
Mar 20 Javascript
浅谈JavaScript作用域和闭包
Sep 18 Javascript
vue加载自定义的js文件方法
Mar 13 Javascript
Angular 多模块项目构建过程
Feb 13 Javascript
Jquery cookie插件实现原理代码解析
Aug 04 jQuery
vue 使用自定义指令实现表单校验的方法
Aug 28 #Javascript
微信小程序多音频播放进度条问题
Aug 28 #Javascript
微信小程序获取音频时长与实时获取播放进度问题
Aug 28 #Javascript
vue表单自定义校验规则介绍
Aug 28 #Javascript
vue+axios+mock.js环境搭建的方法步骤
Aug 28 #Javascript
Vue实现用户自定义字段显示数据的方法
Aug 28 #Javascript
浅谈VUE单页应用首屏加载速度优化方案
Aug 28 #Javascript
You might like
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
php之readdir函数用法实例
2014/11/13 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
php中smarty区域循环的方法
2015/06/11 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
类之Prototype.js学习
2007/06/13 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
angular4自定义组件详解
2017/09/28 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
python 美化输出信息的实例
2018/10/15 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
雅诗兰黛旗下专业男士保养领导品牌:Lab Series
2017/05/15 全球购物
广州某公司软件工程师面试题
2014/12/22 面试题
超市实习总结自我鉴定
2013/09/19 职场文书
办公室文秘自我鉴定
2013/09/21 职场文书
班级出游活动计划书
2014/08/15 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python