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中常用的SET和GET$(”#msg”).html循环介绍
Oct 09 Javascript
两种JS实现屏蔽鼠标右键的方法
Aug 20 Javascript
30分钟快速掌握Bootstrap框架
May 24 Javascript
js实现上传文件添加和删除文件选择框
Oct 24 Javascript
Angular在一个页面中使用两个ng-app的方法
Feb 20 Javascript
AngularJS中的拦截器实例详解
Apr 07 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 jQuery
vue2.0在没有dev-server.js下的本地数据配置方法
Feb 23 Javascript
vue-router重定向不刷新问题的解决
Jun 25 Javascript
jQuery实现数字华容道小游戏(实例代码)
Jan 16 jQuery
微信小程序实现弹框效果
May 26 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
Jul 28 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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
也谈 PHP 和 MYSQL
2006/10/09 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
js中的this关键字详解
2013/09/25 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
python解析基于xml格式的日志文件
2017/02/25 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
对python中UDP,socket的使用详解
2019/08/22 Python
Django 自定义分页器的实现代码
2019/11/24 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
浅析Python的命名空间与作用域
2020/11/25 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
求职自荐信
2013/12/14 职场文书
学前教育求职自荐信范文
2013/12/25 职场文书
狂人日记读书笔记
2015/06/30 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书
Mysql事务索引知识汇总
2022/03/17 MySQL
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA