Php openssl\u public\u加密失败

Php openssl\u public\u加密失败,php,encryption,x509certificate,public-key-encryption,php-openssl,Php,Encryption,X509certificate,Public Key Encryption,Php Openssl,当我加密一个变量并在其中放入一些文本时,它是有效的,但是如果我使用一个变量并将其分配给$output,则如下所示: $data1 = new DOMDocument("1.0", "utf-8"); //creating the xml document ... //after creating the document $output = $data1->saveXML(); 其中$data1是一个xml对象。之后,我将使用公共证书提取公钥,用于加密字符串$output: $pub_k

当我加密一个变量并在其中放入一些文本时,它是有效的,但是如果我使用一个变量并将其分配给$output,则如下所示:

$data1 = new DOMDocument("1.0", "utf-8");
//creating the xml document
...
//after creating the document
$output = $data1->saveXML();
其中$data1是一个xml对象。之后,我将使用公共证书提取公钥,用于加密字符串$output:

$pub_key = openssl_pkey_get_public(file_get_contents('./certificate.cer'));
$keyData = openssl_pkey_get_details($pub_key);
$key = $keyData['key'];
在变量$key中包含公钥后,我想用公钥$key加密$output,并使用以下代码来处理可能的错误:

$crypted='';
if (($blnResult = openssl_public_encrypt($output, $crypted, $key)) === false) {
    throw new \Exception("error: openssl_public_encrypt() failed!");
}

echo base64_encode($crypted);

它给了我一个
错误:openssl\u public\u encrypt()失败。请注意,如果我分配给
$output='foo'
,它就工作了,所以我不明白如果我分配给
$output the data->saveXML(),它为什么不工作?它是一个270个字符长的字符串。它“应该”起作用。

我也有同样的问题。我的问题是,要么我使用的公钥很短,要么我试图加密的数据很长。因此,您有两种选择: -您可以减少试图加密的数据量,或者, -您可以使用允许加密更多数据的公钥(更大的公钥)

参考:

看到您在其他问题中接受了什么,而他们没有回复您在答案下的评论,我觉得这个问题可能是重新发布的,也可能是不接受答案的。关键尺寸可能是多少?2048位密钥最多可以加密245个字节。我猜这是2048位密钥。我知道我最多只能写117个字符。那么,我可以做些什么来增加大小呢?停止使用RSA直接加密<代码>openssl_seal()
更安全。切换到LibNaude并使用
Naude\u crypto\u box\u seal()
更好。这节省了我很多时间!我也有一个类似的问题,我们发送给第三方的一些请求可以正常工作,而其他请求却失败了。看完这篇文章后,我们又要了一把有效的钥匙。谢谢