Js通过AES加密后PHP用Openssl解密的方法


Posted in Javascript onJuly 12, 2019

前言

最近遇到的几个网站在提交密码时提交的已经是密文,也就是说在网络上传输的密码是密文,这样提升了密码在网络传输中的安全性。

后端语言加解密已经有很成熟的方案了,前端的话Google之前出过一个crypto-js,为浏览器的js提供了加解密方案。今天一起来了解一下基于AES的前后端加解密流程。

Javascript

1、安装npm包 npm install crypto-js

2、加密代码

const CryptoJS = require("crypto-js");
const key = CryptoJS.enc.Latin1.parse('1234567812345678');
const iv = CryptoJS.enc.Latin1.parse('1234567812345678');
const encoded = CryptoJS.AES.encrypt('hahaha', key, {
 iv: iv,
 mode: CryptoJS.mode.CBC,
 adding: CryptoJS.pad.ZeroPadding
}).toString()
console.log('encoded', encoded)

3、解密代码

const key = CryptoJS.enc.Latin1.parse('123456781234567812345678');
const iv = CryptoJS.enc.Latin1.parse('1234567812345678');
const decoded = CryptoJS.AES.decrypt(encoded, key, {
 iv: iv,
 mode: CryptoJS.mode.CBC,
 adding: CryptoJS.pad.ZeroPadding
}).toString(CryptoJS.enc.Utf8)
console.log('decoded', decoded);

4、输出如下

encoded 6bcgYd4f4ZgNOQH/3tqMpg==
decoded hahaha

PHP

直接使用openssl解密即可,代码如下:

$encoded = '6bcgYd4f4ZgNOQH/3tqMpg==';
$key = '123456781234567812345678';
$iv = '1234567812345678';
var_dump(openssl_decrypt($encoded, 'AES-192-CBC', $key, 0,$iv));

输出结果:

string(6) "hahaha"

注意事项

1、AES加密位数跟密钥key有关, 以下是密钥位数和加密对应关系

  • 16 => AES-128
  • 24 => AES-192
  • 32 => AES-256

2、iv是初始化向量. 超过16字节或者不足16字节都会被补足16字节或者截断到16字节。由于AES是块加密,铭文被分割成固定长度的块(一般是16字节长度),所以iv也是16字节。

3、CBC是加密模式

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
Mar 24 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
May 27 Javascript
js渐变显示渐变消失示例代码
Aug 01 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
Feb 26 Javascript
JavaScript实现网页对象拖放功能的方法
Apr 15 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
Dec 03 Javascript
js实现图片缓慢放大缩小效果
Aug 02 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
Nov 22 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
Jul 05 Javascript
vue滚动插件better-scroll使用详解
Oct 18 Javascript
vue等两个接口都返回结果再执行下一步的实例
Sep 08 Javascript
canvas 中如何实现物体的框选
Aug 05 Javascript
django js 实现表格动态标序号的实例代码
Jul 12 #Javascript
JavaScript中的连续赋值问题实例分析
Jul 12 #Javascript
微信小程序开发常见问题及解决方案
Jul 11 #Javascript
使用vue for时为什么要key【推荐】
Jul 11 #Javascript
利用Angular7开发一个Radio组件的全过程
Jul 11 #Javascript
vue发送websocket请求和http post请求的实例代码
Jul 11 #Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 #Javascript
You might like
一个PHP的String类代码
2010/04/20 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
php绘制一条直线的方法
2015/01/24 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
微信小程序后端实现授权登录
2020/02/24 Javascript
Python 模板引擎的注入问题分析
2017/01/01 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
后勤工作职责
2013/12/22 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
工作迟到检讨书
2014/02/21 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
2014年项目工作总结
2014/11/24 职场文书
公务员考察材料
2014/12/23 职场文书
Vue2.0搭建脚手架
2022/03/13 Vue.js
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js