PHP ist openssl_sign erzeugt unterschiedliche Signatur als SSCrypto Zeichen

Ich Schreibe eine OS X-client-eine software, die in PHP geschrieben ist. Diese software verwendet eine einfache RPC-Schnittstelle zu empfangen und Befehle ausführen. Der RPC-client zu unterzeichnen sind die Befehle, die er sendet, um sicherzustellen, dass kein MITM ändern können, einer von Ihnen.

Jedoch, wie der server war nicht die Annahme der Unterschriften, die ich gesendet von meinem OS-X-client, ich begann die Untersuchung und fand heraus, dass der PHP-openssl_sign Funktion generiert eine unterschiedliche Signatur für einen bestimmten privaten Schlüssel/Daten-Kombination als die in Objective-C SSCrypto Rahmen (das ist nur ein wrapper um die openssl-lib):

SSCrypto *crypto = [[SSCrypto alloc] initWithPrivateKey:self.localPrivKey];
NSData *shaed = [self sha1:@"hello"];
[crypto setClearTextWithData:shaed];
NSData *data = [crypto sign];

erzeugt eine Signatur wie CtbkSxvqNZ+mAN...

Den PHP-code

openssl_sign("hello", $signature, $privateKey);

erzeugt eine Signatur wie 6u0d2qjFiMbZ+...
(Für mein gewissen Schlüssel, natürlich. base64-codiert)

Ich bin mir nicht ganz sicher, warum dies passiert ist und ich erfolglos experimentiert mit unterschiedlichen hash-algorithmen. Wie die PHP-Dokumentation gibt SHA1 standardmäßig verwendet wird.

Also, warum diese beiden Funktionen erzeugen unterschiedliche Signaturen und wie kann ich meine Objective-C-Teil zu erzeugen, eine Signatur, die PHPs openssl_verify akzeptieren?

Anmerkung: ich habe überprüft, dass der Schlüssel und die Daten sind richtig!!!!

InformationsquelleAutor | 2010-04-23
Schreibe einen Kommentar