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 01 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
Jul 10 Javascript
JQ获取动态加载的图片大小的正确方法分享
Nov 08 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
Jan 06 Javascript
jQuery选择器全集详解
Nov 24 Javascript
Js实现自定义右键行为
Mar 26 Javascript
jQuery弹出层插件Lightbox_me使用指南
Apr 21 Javascript
JS从数组中随机取出几个数组元素的方法
Aug 02 Javascript
基于Layer+jQuery的自定义弹框
May 26 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
vue实现自定义H5视频播放器的方法步骤
Jul 01 Javascript
js实现滚动条自动滚动
Dec 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实现数字补零功能的2个函数介绍
2014/05/12 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
用javascript实现画板的代码
2007/09/05 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
layui导航栏实现代码
2017/05/19 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
windows上安装Anaconda和python的教程详解
2017/03/28 Python
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
Python实现AI换脸功能
2020/04/10 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
物业管理求职自荐信
2013/09/25 职场文书
优秀求职信范文分享
2013/12/19 职场文书
公积金转移接收函
2014/01/11 职场文书
致全体运动员广播稿
2014/02/01 职场文书
安全检查管理制度
2014/02/02 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
法人授权委托书公证范本
2014/09/14 职场文书