当我加密在其中放置一些文本的变量时,它正在工作,但是如果我使用一个变量,将其分配给$ uppoutt:
$data1 = new DOMDocument("1.0", "utf-8");
//creating the xml document
...
//after creating the document
$output = $data1->saveXML();
其中$ data1是XML对象。之后,我正在使用公共证书提取公共密钥,以加密字符串$输出:
$pub_key = openssl_pkey_get_public(file_get_contents('./certificate.cer'));
$keyData = openssl_pkey_get_details($pub_key);
$key = $keyData['key'];
在变量$键中拥有公共密钥后,我想用public键$键加密$输出,并且我使用以下代码来处理可能的错误:
$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'
,它正在工作,所以我不明白为什么要分配给$output the data->saveXML();
,为什么它不起作用?这是一个270个字符的字符串。它"应该"起作用。
我也有同样的问题。我的问题是,我使用的公共密钥很短,要么我试图加密的数据很长。因此,您有2个选项: - 您可以减少试图加密的数据量或 - 您可以使用允许您加密更多数据(更大的公共密钥)的公共密钥
参考:https://en.wikipedia.org/wiki/rsa_(cryptosystem)