失败openssl_public_encrypt

时间:2017-09-23 12:50:48

标签: 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_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个字符长的字符串。它"应该"工作

1 个答案:

答案 0 :(得分:1)

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

参考: https://en.wikipedia.org/wiki/RSA_(cryptosystem)