2016-05-24 10 views
0

Ich muss signieren Daten auf meinem Server in PHP, und überprüfen Sie die signierten Daten auf meiner Java-Desktop-Anwendung. Mein Problem ist, dass ich es nicht schaffen, einen Schlüssel zu erzeugen, dass beide Sprachen akzeptieren ...DSA-Algorithmus: Anmelden in PHP

Mein erster Versuch, den Schlüssel mit Java KeyPairGenerator zu erzeugen, war aber wie in that question gezeigt, konnte ich nicht openssl machen zu lesen der Schlüssel.

Jetzt erzeugte ich die Schlüssel mit OpenSSL wie folgt aus:

$openssl dsaparam 512 </dev/random> dsaparam.pem 
$openssl gendsa dsaparam.pem -out dsa_priv.pem 
$openssl dsa -in dsa_priv.pem -pubout -out dsa_pub.pem 

Ich versuche jetzt etwas mit diesem Code zu unterschreiben:

<?php 
$data = "test"; 

$pkeyid = openssl_pkey_get_private("dsa_priv.pem"); 
echo openssl_sign($data, $signature, $pkeyid); 
echo "<br/>"; 
echo $signature; 
?> 

Ergebnis?

openssl_sign(): supplied key param cannot be coerced into a private key in ... 

Was mache ich falsch? Kann mir jemand helfen, einen funktionierenden DSA-Schlüssel zu generieren und etwas damit zu signieren?

Antwort

0

Ihnen fehlt hier eine wichtige Sache. Die Methode openssl_pkey_get_private verwendet einen Schlüssel als Zeichenfolge oder eine Datei mit dem Protokoll file://. Das folgende Beispiel funktioniert wie erwartet:

$data = "test"; 

$pkeyid = openssl_pkey_get_private("file://dsa_priv.pem"); 
openssl_sign($data, $signature, $pkeyid); 
echo "\nSignature: " . base64_encode($signature) . "\n"; 

und produziert:

Signature: MCwCFBpkSESngh+6ooMQZj7i+76t87QmAhQJTfyvvoZ4YFPd722R2qRnXD/Giw==

+0

Ok, ich bin für einen Monat verlassen jetzt so kann ich nicht wirklich versuchen, aber ich glaube, man versucht, und es funktioniert. Vielen Dank ! – Sharcoux

+0

@Sharcoux Ja, ich habe es ausprobiert und es funktioniert :) –