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数组定义方法
Sep 10 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
Jul 26 Javascript
js计算两个时间之间天数差的实例代码
Nov 19 Javascript
js操作table示例(个人心得)
Nov 29 Javascript
javaScript的函数对象的声明详解
Feb 06 Javascript
jQuery往返城市和日期查询实例讲解
Oct 09 Javascript
浅析JavaScript中浏览器的兼容问题
Apr 19 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
Oct 19 Javascript
浅谈react前后端同构渲染
Sep 20 Javascript
vue-cli3.0 特性解读
Apr 22 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
Mar 28 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
May 10 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/19 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
在js中使用"with"语句中跨frame的变量引用问题
2007/03/08 Javascript
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
初步理解Python进程的信号通讯
2015/04/09 Python
python实现爬虫下载美女图片
2015/07/14 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
python实现推箱子游戏
2020/03/25 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
python适合人工智能的理由和优势
2019/06/28 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
python文件及目录操作代码汇总
2020/07/08 Python
Python 如何实现访问者模式
2020/07/28 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
在求职信中如何凸显个人优势
2013/10/30 职场文书
应届生如何写自荐信
2014/01/05 职场文书
师德学习感言
2014/01/31 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
python如何在word中存储本地图片
2021/04/07 Python
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python