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 相关文章推荐
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
Aug 04 Javascript
ASP中进行HTML数据及JS数据编码函数
Nov 11 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
Mar 07 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
Jun 06 Javascript
禁止空格提交表单的js代码
Nov 17 Javascript
JavaScript中的函数重载深入理解
Aug 04 Javascript
avalon js实现仿微博拖动图片排序
Aug 14 Javascript
bootstrap-treeview自定义双击事件实现方法
Jan 09 Javascript
jquery表单插件form使用方法详解
Jan 20 Javascript
angular实现spa单页面应用实例
Jul 10 Javascript
angularjs请求数据的方法示例
Aug 06 Javascript
关于vue属性使用和不使用冒号的区别说明
Oct 22 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合并静态文件详解
2014/11/14 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
js 数组操作代码集锦
2009/04/28 Javascript
加速IE的Javascript document输出的方法
2010/12/02 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
详解Python文本操作相关模块
2017/06/22 Python
python3操作mysql数据库的方法
2017/06/23 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
分析Python读取文件时的路径问题
2018/02/11 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
Linux中如何用命令创建目录
2015/01/12 面试题
班主任工作经验材料
2014/02/02 职场文书
亮化工程实施方案
2014/03/17 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
园林系毕业生求职信
2014/06/23 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android
nginx之queue的具体使用
2022/06/28 Servers