Js通过AES加密后PHP⽤Openssl解密的⽅法
前⾔
最近遇到的⼏个⽹站在提交密码时提交的已经是密⽂,也就是说在⽹络上传输的密码是密⽂,这样提升了密码在⽹络传输中的安全性。
后端语⾔加解密已经有很成熟的⽅案了,前端的话Google之前出过⼀个crypto-js,为浏览器的js提供了加解密⽅案。今天⼀起来了解⼀下基于AES的前后端加解密流程。
Javascript
1、安装npm包npm install crypto-js
2、加密代码
const CryptoJS = require("crypto-js");
const key = Latin1.parse('1234567812345678');
const iv = Latin1.parse('1234567812345678');
const encoded = pt('hahaha', key, {
iv: iv,
mode: de.CBC,
php实例代码解密adding: CryptoJS.pad.ZeroPadding
}).toString()
console.log('encoded', encoded)
3、解密代码
const key = Latin1.parse('123456781234567812345678');
const iv = Latin1.parse('1234567812345678');
const decoded = CryptoJS.AES.decrypt(encoded, key, {
iv: iv,
mode: de.CBC,
adding: CryptoJS.pad.ZeroPadding
}).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是加密模式
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论