php rsa加aes传输,关于RSA+AES加密(如何在PHP中解密AES)

本文探讨了前端使用JS(RSA+AES)加密用户密码并通过RSA公钥传递AES密钥,然后后端用PHP实现RSA私钥解密获取AES密钥,进一步进行AES解密还原用户密码的过程。作者分享了JavaScript和PHP的实现代码,并寻求关于AES解密部分的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我尝试通过RSA+AES方法来加密传输用户提交的密码,我已经完成了前端JS的编写(代码如下,并附一次运行结果截图,AES,RSA加密的值是会更变的),它使用了两个库,分别是jsencrypt和crypto-js,现在,我正在编写后端解密的PHP(代码如下),但是在这过程中我遇到了一点困难,RSA解密部分已经编写完毕并测试无误,但是我不懂得如何编写AES解密部分,即使我已经查阅了许多的资料,他们的例子与我有一些不同,我不懂得如何去使用它(文末我会附上一些例子)。

问题:

1,请问我的JS加密部分是否正确并符合逻辑;

2,请问我应该如何编写PHP AES解密部分;

3,请问我的思路是否正确?:

客户端(JavaScript):

AES 加密 原始用户密码

RSA 公钥 加密 AES秘钥

—数据传输—

服务端(PHP):

RSA 私钥 解密 获得 AES秘钥

AES 解密 获得 原始用户密码

再通过加密 原始用户密码 获得 加密用户密码 存储到 数据库 中

我的JavaScript代码:

$(function () {

//加密部分

//AES

var password_form="QAQ";

console.log(password_form);

var password = CryptoJS.AES.encrypt(password_form,'Lime Website').toString();

console.log(password);

//RSA

var public_key = $("#inputPublic_key").val();

console.log(public_key);

var private_key = $("#inputPrivate_key").val();

console.log(private_key);

var encrypt = new JSEncrypt();

encrypt.setPublicKey(public_key);

var AES_key = encrypt.encrypt(password);

console.log(AES_key);

//解密部分(实际应由服务端完成,此处为了方便所以写在这)

//RSA

var decrypt = new JSEncrypt();

decrypt.setPrivateKey(private_key);

var AES_key_decrypt = decrypt.decrypt(AES_key);

console.log(AES_key_decrypt);

//AES

var bytes = CryptoJS.AES.decrypt(AES_key_decrypt,'Lime Website');

var password_decrypt = bytes.toString(CryptoJS.enc.Utf8);

console.log(password_decrypt);

});

我的PHP代码:

<?php

$private_key = '-----BEGIN RSA PRIVATE KEY-----

MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ

WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR

aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB

AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv

xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH

m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd

8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF

z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5

rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM

V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe

aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil

psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz

uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876

-----END RSA PRIVATE KEY-----';

$private_key_public_key_availability = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id

$AES_key = "iOks+yhKxQBiqtd5rHQRNdXOGqixhNzquuZuPZ5dDsYfh1nDTLiygukiyexNBqHfmA7zis1nRTZW2Nw4bN5Pr2yCgvh1GPV6K5WigO5jD1+ztuyp1hV5ymNSws6EUPPjW9cwrOpO7EIeiYjvGo7ziyPwsCU0vwtQAkNAFY3uhB0=";

$AES_key_decrypted = "";

echo "通过解密后数据:";

openssl_private_decrypt(base64_decode($AES_key),$AES_key_decrypted,$private_key_public_key_availability);

echo $AES_key_decrypted;

JavaScript其中一次运行结果的截图:

bVbn7Dl?w=555&h=438

一些例子:

https://odan.github.io/2017/0…

https://stackoverflow.com/que…

https://stackoverflow.com/que…

最后感谢大家的回答吖QAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值