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

今天我尝试通过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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!下面是一个使用RSAAES混合加密的示例代码: ```python from Crypto.Cipher import AES, PKCS1_OAEP from Crypto.PublicKey import RSA from Crypto.Random import get_random_bytes # 生成RSA密钥对 key = RSA.generate(2048) private_key = key.export_key() public_key = key.publickey().export_key() # 加密数据 data = b'This is a secret message.' # 使用AES生成随机密钥 session_key = get_random_bytes(16) # 使用RSA公钥加密AES密钥 rsa_cipher = PKCS1_OAEP.new(RSA.import_key(public_key)) encrypted_session_key = rsa_cipher.encrypt(session_key) # 使用AES加密数据 aes_cipher = AES.new(session_key, AES.MODE_EAX) ciphertext, tag = aes_cipher.encrypt_and_digest(data) # 传输加密后的数据和密钥... # 接收方解密数据 # 使用RSA私钥解密AES密钥 rsa_cipher = PKCS1_OAEP.new(RSA.import_key(private_key)) session_key = rsa_cipher.decrypt(encrypted_session_key) # 使用AES解密数据 aes_cipher = AES.new(session_key, AES.MODE_EAX) decrypted_data = aes_cipher.decrypt_and_verify(ciphertext, tag) print(decrypted_data.decode()) ``` 在这个示例,首先生成了一个RSA密钥对。然后,生成了一个随机的AES密钥,并使用RSA公钥加密了该密钥。接下来,使用AES密钥对要加密的数据进行加密,并生成了一个认证标签。最后,发送加密后的数据和加密AES密钥给接收方。 接收方使用RSA私钥解密接收到的AES密钥,并使用解密后的AES密钥解密数据,并进行认证。 请注意,这只是一个简单的示例代码,用于演示RSAAES混合加密的基本概念。在实际应用,需要更多的安全措施和错误处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值