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 相关文章推荐
jquery 1.4.2发布!主要是性能与API
Feb 25 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
Apr 12 Javascript
javascript之AJAX框架使用说明
Apr 24 Javascript
jQuery contains过滤器实现精确匹配使用方法
Apr 12 Javascript
解析Jquery取得iframe中元素的几种方法
Jul 04 Javascript
JavaScript使用focus()设置焦点失败的解决方法
Sep 03 Javascript
jQuery实现表格展开与折叠的方法
May 04 Javascript
浅谈javascript中return语句
Jul 15 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 Javascript
JavaScript实现选中文字提示新浪微博分享效果
Jun 15 Javascript
简单了解node npm cnpm的具体使用方法
Feb 27 Javascript
微信小程序获取当前位置和城市名
Nov 13 Javascript
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
php 分库分表hash算法
2009/11/12 PHP
php 无限级数据JSON格式及JS解析
2010/07/17 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
javascript import css实例代码
2008/07/18 Javascript
js 方法实现返回多个数据的代码
2009/04/30 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
python基础教程之自定义函数介绍
2014/08/29 Python
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
美国一家著名的儿童鞋制造商:Stride Rite
2017/01/02 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
酒店应聘自荐信
2013/11/09 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
公司口号大全
2014/06/11 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
国庆庆典邀请函
2015/02/02 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
Python WSGI 规范简介
2021/04/11 Python
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS