【发布时间】:2012-04-10 12:30:57
【问题描述】:
我有这个 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-----
【问题讨论】:
-
密钥中的
+符号发生了什么变化?它们在格式化的块中消失了。 -
嗯..我不确定。我真的不知道他们是否应该在那里,因为坦率地说,我不知道我在做什么。我正在尝试使用以下协议:github.com/vexsoftware/votifier
-
+ 符号与所有其他字符一样表示字节。 Base64 编码使用
A-Ba-b0-9和/和+对字节进行编码,并可能使用=字符来填充最后一部分。 -
这可能是
wordwrap函数,它似乎旨在在单词边界上拆分字符串。您最好只计算字符并手动插入换行符(如果我没记错的话,两个)。 -
我不知道该怎么做。 o3o
标签: php encryption openssl warnings rsa