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 相关文章推荐
Javascript 日期处理之时区问题
Oct 08 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
Dec 04 Javascript
关于javascript function对象那些迷惑分析
Oct 24 Javascript
confirm的用法示例用于按钮操作时确定是否执行
Jun 19 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
Oct 11 Javascript
贴近用户体验的Jquery日期、时间选择插件
Aug 19 Javascript
Bootstrap每天必学之标签与徽章
Nov 27 Javascript
React中使用collections时key的重要性详解
Aug 07 Javascript
JavaScript实现QQ列表展开收缩扩展功能
Oct 30 Javascript
Node.js使用supervisor进行开发中调试的方法
Mar 26 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
Aug 27 jQuery
简单实现节流函数和防抖函数过程解析
Oct 08 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
range 标准化之获取
2011/08/28 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
深入了解js原型模式
2019/05/30 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
django解决跨域请求的问题
2018/11/11 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
软件测试英文面试题
2012/10/14 面试题
关于九一八事变的演讲稿2014
2014/09/17 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
大一学生个人总结
2015/02/15 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python