首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES加密用JS,解密用PHP?

AES加密用JS,解密用PHP?
EN

Stack Overflow用户
提问于 2019-07-14 08:12:41
回答 1查看 849关注 0票数 2

当我的表单提交时,它将首先向此控制器操作发出请求,以获取服务器的公钥:

代码语言:javascript
复制
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生成一个密钥,该密钥稍后将被public_key加密。

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

代码语言:javascript
复制
{
    secret_key: xxx,
    iv: xxx,
    form_data: {...}
}

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

代码语言:javascript
复制
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密钥生成和加密?似乎找不到任何关于它的好文件。我应该如何格式化数据,以便被服务器接受以进行解密?

我一直在用PHP解密AES,因为它需要一个$tag,当所有东西都来自客户端时,我不知道从哪里得到它。

代码语言:javascript
复制
$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的情况下解密。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-14 16:57:12

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

然而,RSA PKCS#1 v1.5和AES-CBC都容易受到填充甲骨文的攻击.因此,不仅对手可以改变信息,信息也是不保密的。换句话说,您可以任意使用256位密钥,但不应该创建自己的传输协议,因为感知到的安全性根本不存在。

你可以在密文上签名,但这也有问题--一般情况下,我们先签字后加密。

使用TLS。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57025639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档