我有这个RSA公钥:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtixUGzGpLXgZ7AV1HfmIHV/FEF+fww77FekRc2oLhUOd4HitwCPo76fjtdsQBEt8w9HZ3CXVphaAU2BA6MEZJ3ShVMsdAXb2ZA1C+lu7k1GV9M/BhucTg35HujSK647Sc5MwVLwFsN80dAnGsZF8gwb2TNUzXHwzbAb30T01zuqf8RCM75OwKZFYqzu7FOVrtk/w9mh92MOXG0l7WSqNIctu8Kxka/tEJJIA5nqMGNMocjwprXy66NS7FFy1GY+NnxfFLtODqq0tllc50UCDsnqSvNmj2wcnAcsCzNOoxPPgp7t8S+sQvOzgc5W3CDjIsYEiGD+vzSVNkGiRou577wIDAQAB
(我尝试的每一个其他键也会给出同样的错误)
和这个字符串:
$str = "VOTE\n" .
"server-list\n" .
"$user\n" .
"$userip\n" .
time()."\n";
我使用这段代码使字符串正好变成256个字节,以便它符合这个特定应用程序的标准:
$leftover = (256 - strlen($str)) / 2;
while ($leftover > 0) {
$str .= "\x0";
$leftover--;
}
要格式化密钥,我可以这样做:
$key = wordwrap($key, 65, "\n", true);
$key = <<<EOF
-----BEGIN PUBLIC KEY-----
$key
-----END PUBLIC KEY-----
EOF;
当我执行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-----
任何帮助将不胜感激!
编辑:工作密钥应如下所示:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmHzD76i8DA25nC+Qsswi
OM0lW+gViiQD4tEm7suxBc2BGibtdlrsprVIId92hSjQKx4x8+XVWU6k89T5vy8Y
txpXN759OWdGkDi8uvZuYclMjW9Rao+oqSvbXH37R7oSY287I+6uOHclGhniQN3q
RyoXBkbhDk0/FTI/i549q/gGk1UZYv449KLrDOqmtohRcIyAYVnvvWtD1kIzourq
hMtEIrPqwoBqTaUA9kOIXw1jMovao2TN52j48KgOg9KjqtdwUwD9e6n7hJd/subF
6woc8L7zjJFOHH5gacUC7vtiMpBpnSyLQpjFLepYYwftjsRmg4xLdh+Zvgw3xqi4
lwIDAQAB
-----END PUBLIC KEY-----
5条答案
按热度按时间ubby3x7f1#
我突然想到为什么它不起作用,所以我在这里回答我自己的问题。现在我想起来了,这和@sarnold最初说的话是一致的:+符号消失了(它们被空格取代)
原来是因为我是通过HTTP POST得到密钥的,所以它格式化了URL(也就是密钥),把所有的+号都变成了空格,这就把密钥弄丢了,导致了这个难题。
谢谢你的帮助。:)
vshtjzan2#
首先,我推荐使用phpseclib,一个纯粹的PHP RSA实现。它的可移植性更强,更容易使用,等等。例如:
如果你坚持使用openssl扩展...试试这个:
c86crjj03#
只需使用
str_replace(' ', '+', $string)
对我有用!
fjaof16o4#
如果您正在使用
openssl公共加密()
确保键之间没有空格。不建议添加**'+'**来消除空格,因为这可能会更改键-值并导致错误openssl_public_encrypt():key参数不是有效的公钥。
我有这个问题,我的问题是,我做了一些代码编辑,作为回报,添加了一些空格的关键.经过长时间的尝试和大量的谷歌搜索,我生成了一个新的关键,并保持不变,没有改变或编辑空格,它终于工作.
希望它有帮助。从我读过的几篇文章来看,openssl是如此挑剔。所以要小心,不要改变关键字中的任何内容,因为它可能是你头痛的根源。
nzkunb0c5#
其中公钥格式如下:
;