gpt4 book ai didi

javascript - JS中的AES加密,PHP中的解密?

转载 作者:行者123 更新时间:2023-11-30 13:57:11 24 4
gpt4 key购买 nike

当我的表单被提交时,它会首先向这个 Controller 操作发出请求以获取服务器的公钥:

public function preprocessPayment(Request $request) {
// Get public key
$publicKey = $this->EncryptionService->getPublicKey();

// Generate iv
$method = 'aes-256-cbc';
$ivlen = openssl_cipher_iv_length($method);
$iv = openssl_random_pseudo_bytes($ivlen);

return response()->json([
'success' => true,
'data' => [
'public_key' => $publicKey,
'iv' => $iv
]
]);
}

之后,在我的客户端中,我将通过 CryptoJS 使用 AES 生成一个 key ,稍后将使用 public_key 对其进行加密。

然后,表单数据将使用 AES key 在 AES 中加密,然后将以下有效负载提交给服务器:

{
secret_key: xxx,
iv: xxx,
form_data: {...}
}

AES加密后的数据会在这里处理:

public function storePayment(Request $request) {
// Decrypt AES secret key (that was encrypted with the RSA public key),
// using RSA private key
// Decrypt AES client data with secret key
// Store data in database
}

我的问题是,我将如何使用 CryptoJS 在客户端生成 AES key 并进行加密?似乎找不到任何关于它的好文档。我应该如何格式化数据以便服务器接受它进行解密?

而且我一直坚持用 PHP 解密 AES,因为它需要一个 $tag 并且当一切都来自客户端时我不知道从哪里得到它。

$originalData = openssl_decrypt($data, 'aes-128-gcm', $secretKey, $options=0, $iv, $tag);

我找到了这个链接:http://cryptojs.altervista.org/js-php/ ,但我不确定如何让它工作,因为我不确定在哪里可以找到所需的脚本。

编辑:

我犯了一个错误,为了在服务器上解密,我使用的是 aes-128-gcm 而不是 aes-256-cbc。当我更正它时,我能够在没有 $tag 的情况下解密。

最佳答案

AES-256 key 不过是 32 个随机字节。因此,您可以使用加密安全的随机数生成器来创建 key 。

但是,RSA PKCS#1 v1.5 和 AES-CBC 都容易受到 padding oracle 攻击。因此,对手不仅可以更改消息,而且消息也不会保密。换句话说,您可以随心所欲地使用 256 位 key ,但您不应创建自己的传输协议(protocol),因为感知的安全性并不存在。

您可以对密文进行签名,但这也有问题 - 通常我们先签名然后加密。

使用 TLS。

关于javascript - JS中的AES加密,PHP中的解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57025639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com