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 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
Apr 14 Javascript
jquery的extend和fn.extend的使用说明
Jan 09 Javascript
Javascript中匿名函数的多种调用方式总结
Dec 06 Javascript
javascript异步编程的4种方法
Feb 19 Javascript
jQuery中scrollLeft()方法用法实例
Jan 16 Javascript
JS实现模拟风力的雪花飘落效果
May 13 Javascript
JavaScript简单修改窗口大小的方法
Aug 03 Javascript
基于jQuery Tipso插件实现消息提示框特效
Mar 16 Javascript
使用react-router4.0实现重定向和404功能的方法
Aug 28 Javascript
新手如何快速理解js异步编程
Jun 24 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
JS实现json数组排序操作实例分析
Oct 28 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 字符串 小常识
2009/06/05 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
php两种无限分类方法实例
2015/04/21 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
javascript 数组操作详解
2015/01/29 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Python模拟用户登录验证
2017/09/11 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
python编写计算器功能
2019/10/25 Python
python 多线程中join()的作用
2020/10/29 Python
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
大班幼儿评语大全
2014/04/30 职场文书
运动会横幅标语
2014/06/17 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL