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获取当页面上鼠标光标位置和触发事件的对象的代码
Dec 09 Javascript
javascript基础第一章 JavaScript与用户端
Jul 22 Javascript
zeroclipboard复制到剪切板的flash
Aug 04 Javascript
jQuery 获取浏览器所在的IP地址的小例子
Nov 08 Javascript
对Web开发中前端框架与前端类库的一些思考
Mar 27 Javascript
如何让一个json文件显示在表格里【实现代码】
May 09 Javascript
AngularJS入门教程之表格实例详解
Jul 27 Javascript
详解用node搭建简单的静态资源管理器
Aug 09 Javascript
JS库之wow.js使用方法
Sep 14 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
Jul 27 Javascript
百度小程序之间的页面通信过程详解
Jul 18 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
Dec 25 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注释实例技巧
2008/10/03 PHP
PHP5 字符串处理函数大全
2010/03/23 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
理解JavaScript中的事件
2006/09/23 Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
js 异步处理进度条
2010/04/01 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
AngularJS指令用法详解
2016/11/02 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
Python定时执行之Timer用法示例
2015/05/27 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
如何用Python合并lmdb文件
2018/07/02 Python
python绘制中国大陆人口热力图
2018/11/07 Python
python 动态调用函数实例解析
2019/10/21 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
python3 logging日志封装实例
2020/04/08 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
公务员总结性个人自我评价
2013/12/05 职场文书
电脑租赁公司创业计划书
2014/01/08 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
大学生励志演讲稿
2014/04/25 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
领导干部失职检讨书
2015/05/05 职场文书
2016七夕情人节感言
2015/12/09 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript