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实现的基于金山词霸网络翻译的代码
Jan 15 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
Jun 07 Javascript
jquery获取select,option所有的value和text的实例
Mar 06 Javascript
Vue2.x中的父子组件相互通信的实现方法
May 02 Javascript
微信小程序wx:for和wx:for-item的用法详解
Apr 01 Javascript
jQuery访问json文件中数据的方法示例
Jan 28 jQuery
seajs和requirejs模块化简单案例分析
Aug 26 Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 Javascript
Electron整合React使用搭建开发环境的步骤详解
Jun 07 Javascript
JS如何生成动态列表
Sep 22 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
Sep 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
php mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
浅谈jQuery的offset()方法及示例分享
2015/07/17 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
用python做游戏的细节详解
2019/06/25 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
市场安全管理制度
2014/01/26 职场文书
创业计划书模版
2014/02/05 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
先进典型事迹材料
2014/12/29 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
Python进度条的使用
2021/05/17 Python