PHP openssl_public_encrypt"关键参数不是有效密钥"

fru*_*cup 7 php encryption warnings openssl rsa

我有这个RSA公钥:

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtixUGzGpLXgZ7AV1HfmIHV/FEF+fww77FekRc2oLhUOd4HitwCPo76fjtdsQBEt8w9HZ3CXVphaAU2BA6MEZJ3ShVMsdAXb2ZA1C+lu7k1GV9M/BhucTg35HujSK647Sc5MwVLwFsN80dAnGsZF8gwb2TNUzXHwzbAb30T01zuqf8RCM75OwKZFYqzu7FOVrtk/w9mh92MOXG0l7WSqNIctu8Kxka/tEJJIA5nqMGNMocjwprXy66NS7FFy1GY+NnxfFLtODqq0tllc50UCDsnqSvNmj2wcnAcsCzNOoxPPgp7t8S+sQvOzgc5W3CDjIsYEiGD+vzSVNkGiRou577wIDAQAB
Run Code Online (Sandbox Code Playgroud)

(我尝试的每个其他键也会产生相同的错误)

而这个字符串:

$str = "VOTE\n" .
"server-list\n" .
"$user\n" .
"$userip\n" .
time()."\n";
Run Code Online (Sandbox Code Playgroud)

我使用此代码使字符串成为正好256字节,以便它遵循此特定应用程序的标准:

$leftover = (256 - strlen($str)) / 2;
while ($leftover > 0) {
    $str .= "\x0";
    $leftover--;
}
Run Code Online (Sandbox Code Playgroud)

要格式化密钥,我这样做:

    $key = wordwrap($key, 65, "\n", true);
    $key = <<<EOF
    -----BEGIN PUBLIC KEY-----
    $key
    -----END PUBLIC KEY-----
EOF;
Run Code Online (Sandbox Code Playgroud)

当我这样做时,openssl_public_encrypt($str, $encrypted, $key);我收到以下警告:

Warning: openssl_public_encrypt() function.openssl-public-encrypt: key parameter is not a valid public key in ...

我不确定为什么会这样.当我回应它时,这就是键的样子:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtixUGzGpLXgZ7AV1HfmIH
V/FEF
fww77FekRc2oLhUOd4HitwCPo76fjtdsQBEt8w9HZ3CXVphaAU2BA6MEZJ3ShVMsd
AXb2ZA1C
lu7k1GV9M/BhucTg35HujSK647Sc5MwVLwFsN80dAnGsZF8gwb2TNUzXHwzbAb30T
01zuqf8RCM75OwKZFYqzu7FOVrtk/w9mh92MOXG0l7WSqNIctu8Kxka/tEJJIA5nq
MGNMocjwprXy66NS7FFy1GY
NnxfFLtODqq0tllc50UCDsnqSvNmj2wcnAcsCzNOoxPPgp7t8S
sQvOzgc5W3CDjIsYEiGD vzSVNkGiRou577wIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!

编辑:工作键应如下所示:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmHzD76i8DA25nC+Qsswi
OM0lW+gViiQD4tEm7suxBc2BGibtdlrsprVIId92hSjQKx4x8+XVWU6k89T5vy8Y
txpXN759OWdGkDi8uvZuYclMjW9Rao+oqSvbXH37R7oSY287I+6uOHclGhniQN3q
RyoXBkbhDk0/FTI/i549q/gGk1UZYv449KLrDOqmtohRcIyAYVnvvWtD1kIzourq
hMtEIrPqwoBqTaUA9kOIXw1jMovao2TN52j48KgOg9KjqtdwUwD9e6n7hJd/subF
6woc8L7zjJFOHH5gacUC7vtiMpBpnSyLQpjFLepYYwftjsRmg4xLdh+Zvgw3xqi4
lwIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

fru*_*cup 5

它发生在我身上为什么不起作用,所以我在这里回答我自己的问题.现在我想起来了,它与@sarnold最初说的相关:+符号消失了(它们被空格取代)

事实证明,因为我通过HTTP POST获取密钥,它格式化了URL(因此键)将所有+符号转换为空格.抛弃了关键并造成了这个难题.

谢谢您的帮助.:)