当我加密一个变量,我在其中添加了一些文本时,它正在工作,但如果我使用变量,我将分配给$ 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);
它给了我error: openssl_public_encrypt() failed!
。请注意,如果我分配给$output='foo'
,它正在工作,所以如果我分配给{{1,我不明白为什么它不起作用}}?它是一个270个字符长的字符串。它"应该"工作
答案 0 :(得分:1)
我有同样的问题。我的问题是我使用的公钥很短,或者我尝试加密的数据很长。因此,您有2个选择: -您可以减少尝试加密的数据量,或者, -您可以使用允许您加密更多数据的公共密钥(更大的公共密钥)