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 相关文章推荐
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
Aug 31 Javascript
JavaScript中的ArrayBuffer详细介绍
Dec 08 Javascript
Jquery获取第一个子元素简单实例
Jun 02 Javascript
BootStrap入门教程(三)之响应式原理
Sep 19 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
JavaScript评论点赞功能的实现方法
Mar 13 Javascript
js oncontextmenu事件使用详解
Mar 25 Javascript
JavaScript递归算法生成树形菜单
Aug 15 Javascript
JavaScript内置对象math,global功能与用法实例分析
Jun 10 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
Jul 10 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
Sep 10 Javascript
微信小程序实现通讯录列表展开收起
Nov 18 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 cookie的操作实现代码(登录)
2010/12/29 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
jQuery 使用手册(二)
2009/09/23 Javascript
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
js+canvas实现纸牌游戏
2020/03/16 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
在Python程序中实现分布式进程的教程
2015/04/28 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
python实现爬取图书封面
2018/07/05 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
销售心得体会
2014/01/02 职场文书
2014年个人售房协议书
2014/10/30 职场文书
2014年招生工作总结
2014/11/26 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
如何撰写创业策划书
2019/06/27 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
Python绘画好看的星空图
2022/03/17 Python