2012-03-27 17 views
5

ich diesen öffentlichen RSA-Schlüssel haben:PHP openssl_public_encrypt „Schlüsselparameter kein gültiger Schlüssel ist“

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtixUGzGpLXgZ7AV1HfmIHV/FEF+fww77FekRc2oLhUOd4HitwCPo76fjtdsQBEt8w9HZ3CXVphaAU2BA6MEZJ3ShVMsdAXb2ZA1C+lu7k1GV9M/BhucTg35HujSK647Sc5MwVLwFsN80dAnGsZF8gwb2TNUzXHwzbAb30T01zuqf8RCM75OwKZFYqzu7FOVrtk/w9mh92MOXG0l7WSqNIctu8Kxka/tEJJIA5nqMGNMocjwprXy66NS7FFy1GY+NnxfFLtODqq0tllc50UCDsnqSvNmj2wcnAcsCzNOoxPPgp7t8S+sQvOzgc5W3CDjIsYEiGD+vzSVNkGiRou577wIDAQAB 

(Jede andere Schlüssel Ich versuche, gibt den gleichen Fehler, auch)

und diese Zeichenfolge:

$str = "VOTE\n" . 
"server-list\n" . 
"$user\n" . 
"$userip\n" . 
time()."\n"; 

ich benutze diesen Code die Zeichenfolge genau 256 Bytes werden zu lassen, so dass sie den Standard für diese spezielle Anwendung folgt:

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

den Schlüssel zu formatieren, ich dies tun:

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

Wenn ich openssl_public_encrypt($str, $encrypted, $key); bekomme ich die folgende Warnung:

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

Ich bin nicht sicher, warum dies geschieht. Dies ist, was der Schlüssel aussieht, wenn ich es echo:

-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtixUGzGpLXgZ7AV1HfmIH 
V/FEF 
fww77FekRc2oLhUOd4HitwCPo76fjtdsQBEt8w9HZ3CXVphaAU2BA6MEZJ3ShVMsd 
AXb2ZA1C 
lu7k1GV9M/BhucTg35HujSK647Sc5MwVLwFsN80dAnGsZF8gwb2TNUzXHwzbAb30T 
01zuqf8RCM75OwKZFYqzu7FOVrtk/w9mh92MOXG0l7WSqNIctu8Kxka/tEJJIA5nq 
MGNMocjwprXy66NS7FFy1GY 
NnxfFLtODqq0tllc50UCDsnqSvNmj2wcnAcsCzNOoxPPgp7t8S 
sQvOzgc5W3CDjIsYEiGD vzSVNkGiRou577wIDAQAB 
-----END PUBLIC KEY----- 

Jede mögliche Hilfe würde geschätzt!

Edit: Ein Arbeitsschlüssel soll wie folgt aussehen:

-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmHzD76i8DA25nC+Qsswi 
OM0lW+gViiQD4tEm7suxBc2BGibtdlrsprVIId92hSjQKx4x8+XVWU6k89T5vy8Y 
txpXN759OWdGkDi8uvZuYclMjW9Rao+oqSvbXH37R7oSY287I+6uOHclGhniQN3q 
RyoXBkbhDk0/FTI/i549q/gGk1UZYv449KLrDOqmtohRcIyAYVnvvWtD1kIzourq 
hMtEIrPqwoBqTaUA9kOIXw1jMovao2TN52j48KgOg9KjqtdwUwD9e6n7hJd/subF 
6woc8L7zjJFOHH5gacUC7vtiMpBpnSyLQpjFLepYYwftjsRmg4xLdh+Zvgw3xqi4 
lwIDAQAB 
-----END PUBLIC KEY----- 
+1

Was ist mit den '+' Zeichen in Ihrem Schlüssel passiert? Sie sind in dem formatierten Block verschwunden. – sarnold

+0

Hmm .. Ich bin mir nicht sicher. Und ich weiß wirklich nicht, ob sie da sein sollen, weil ich ehrlich gesagt nicht weiß, was ich mache. Ich versuche, mit dem Protokoll davon zu arbeiten: https://github.com/vexsoftware/votifier – fruitcup

+1

Die + Zeichen stellen Bytes so viel wie alle anderen Zeichen dar. Die Base64-Codierung verwendet 'A-Ba-b0-9' und'/'&' + 'zum Codieren von Bytes und möglicherweise das Zeichen' = 'zum Auffüllen des letzten Teils. –

Antwort

5

Es fiel mir ein, warum es nicht funktionierte, also bin ich hier meine eigene Frage zu beantworten . Jetzt, wo ich darüber nachdenke, bindet es sich an das, was @sarnold ursprünglich gesagt hat: die + Zeichen sind weg (und sie wurden durch Leerzeichen ersetzt) ​​

es stellt sich heraus, dass, weil ich den Schlüssel über HTTP POST bekam, formatierte er URL (und somit der Schlüssel), die alle + Zeichen in Leerzeichen verwandelt. Das hat den Schlüssel abgeworfen und dieses Rätsel verursacht.

Danke für die Hilfe. :)

1

Zuerst würde ich empfehlen phpseclib, eine reine PHP RSA Implementierung verwenden. Es ist eine Tonne mehr tragbar und einfacher zu bedienen und all dieser Jazz. Beispiel:

<?php 
$key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtixUGzGpLXgZ7AV1HfmIHV/FEF+fww77FekRc2oLhUOd4HitwCPo76fjtdsQBEt8w9HZ3CXVphaAU2BA6MEZJ3ShVMsdAXb2ZA1C+lu7k1GV9M/BhucTg35HujSK647Sc5MwVLwFsN80dAnGsZF8gwb2TNUzXHwzbAb30T01zuqf8RCM75OwKZFYqzu7FOVrtk/w9mh92MOXG0l7WSqNIctu8Kxka/tEJJIA5nqMGNMocjwprXy66NS7FFy1GY+NnxfFLtODqq0tllc50UCDsnqSvNmj2wcnAcsCzNOoxPPgp7t8S+sQvOzgc5W3CDjIsYEiGD+vzSVNkGiRou577wIDAQAB'; 

$rsa = new Crypt_RSA(); 
$rsa->loadKey($key); 
$rsa->setPublicKey($key); 

echo $rsa->getPublicKey(); 

Wenn Sie darauf bestehen, die OpenSSL-Erweiterung über die Verwendung ... versuchen Sie dies:

"-----BEGIN PUBLIC KEY-----\r\n" . chunk_split($whatever) . "\r\n-----END PUBLIC KEY-----" 
Verwandte Themen