Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JS Forge解密PHP openssl_seal输出_Javascript_Php_Encryption_Php Openssl_Forge - Fatal编程技术网

Javascript 使用JS Forge解密PHP openssl_seal输出

Javascript 使用JS Forge解密PHP openssl_seal输出,javascript,php,encryption,php-openssl,forge,Javascript,Php,Encryption,Php Openssl,Forge,我正在尝试解密我的openssl_seal存储值。 我的PHP代码: public static function multiEncrypt( string $data, array $publicKeys ) : ?array { foreach ($publicKeys as $cert) { if (false === openssl_get_publickey( $cert )) { Log::getInstance()->e

我正在尝试解密我的openssl_seal存储值。 我的PHP代码:

public static function multiEncrypt( string $data, array $publicKeys ) : ?array
{
    foreach ($publicKeys as $cert)
    {
        if (false === openssl_get_publickey( $cert )) {
            Log::getInstance()->error('multiEncrypt : invalid pubkey ; ' . openssl_error_string());
            return null;
        }
    }

    $encryptedData = null;
    $encryptedKeys = [];
    $initVector = self::getInitVector( self::SEAL_CIPHER );

    $result = openssl_seal(
        $data,
        $encryptedData,
        $encryptedKeys,
        $publicKeys,
        self::SEAL_CIPHER,
        $initVector
    );

    if (false === $result)
        return null;

    $encodedData = base64_encode( $encryptedData );
    $encodedKeys = [];
    foreach ($encryptedKeys as $key) {
        $encodedKeys[] = base64_encode($key);
    }

    return [
        'keys' => $encodedKeys,
        'data' => $encodedData
    ];
}
以及我的客户端代码:

    function decrypt(privkey, blob, key)
    {
        var byteKey = forge.pki.privateKeyFromPem(privkey);
        var usrPubKey = forge.pki.publicKeyFromPem(publicKey);
        //var genPubKey = forge.pki.rsa.setPublicKey(byteKey.n, byteKey.e);

        /*if (usrPubKey !== genPubKey) {
            error('Your private key does not match the public key we have of you.');
            return;
        }*/

        console.log('Decoding key..');
        var decodedKey = atob(key);
        console.log('Decrypting key..');
        var contractUserKey = byteKey.decrypt(decodedKey);

        console.log(contractUserKey);

        console.log(contractUserKey.decrypt(blob));
}

然而,我不断得到“forge.min.js:4068未捕获错误:加密块无效”。这里缺少什么吗?

可能是因为私钥与用于加密的公钥不匹配?或者数据编码不正确?我替换了我的public和private,它现在似乎报告:未捕获错误:加密块无效。请参阅,可能是因为私钥与用于加密的公钥不匹配?或者数据编码不正确?我替换了我的public和private,它现在似乎报告:未捕获错误:加密块无效。看见