Hallo liebe Community,
ich möchte gerne eine PKI programmieren und arbeite hier mit auch mit digitalen Signaturen (x509-Standard).
Um ein neues Zertifikat in meine PKI/Datenbank aufnehmen zu können muss der Anwender die Challenge lösen. Hierzu erzeuge ich eine zufällige Zahl zwischen 1 und 1Mio und verschlüssle diese mit dem Public-Key des angegebenen/neuen Zertifikat. Der Benutzer kann die Zahl nun mit seinem Private-Key entschlüsseln und schickt der PKI das Ergbnis mit dem Public-Key der PKI verschlüsselt zurück.
Mein Problem ist gerade, dass ich aus einem String keinen RSAPublicKey bekomme. Meine Keys habe ich durch den putty key generator erzeugen lassen. Meine Einstellungen waren dabei:
1024 Bits
Type of key to generated: SSH-2 RSA
Hier ist mal mein Programmversuch für die Konvertierung:
Die Fehlermeldung:
Ich bin mit meinem Wissen hier leider am ende. Habe mir auch schon viele Beispiele im Netz angesehen und ausprobiert. Leider hat mir nichts geholfen. Vielleicht habt ihr eine Idee oder einen Vorschlag.
Ich danke euch schon mal.
Viele Grüße
Daywackler
ich möchte gerne eine PKI programmieren und arbeite hier mit auch mit digitalen Signaturen (x509-Standard).
Um ein neues Zertifikat in meine PKI/Datenbank aufnehmen zu können muss der Anwender die Challenge lösen. Hierzu erzeuge ich eine zufällige Zahl zwischen 1 und 1Mio und verschlüssle diese mit dem Public-Key des angegebenen/neuen Zertifikat. Der Benutzer kann die Zahl nun mit seinem Private-Key entschlüsseln und schickt der PKI das Ergbnis mit dem Public-Key der PKI verschlüsselt zurück.
Mein Problem ist gerade, dass ich aus einem String keinen RSAPublicKey bekomme. Meine Keys habe ich durch den putty key generator erzeugen lassen. Meine Einstellungen waren dabei:
1024 Bits
Type of key to generated: SSH-2 RSA
Hier ist mal mein Programmversuch für die Konvertierung:
Java:
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import javax.xml.bind.DatatypeConverter;
public class RSAcryptography {
private String publicK = "AAAAB3NzaC1yc2EAAAABJQAAAIEA2JtgJTOltnBgOHi7LqzHkbQIHMRP7jilADeR"
+"O5PeGzUuAcyoSaif87iWZ+yYVIyTuCGUAM1GcmAA5eu1HiIQci0Ypljc+1hx6MGz"
+"QytPWA8I/mRHDAmZQNuj8CIwB5mD8Yzlf2Qx6xNw/sIwJLA01XnJMuUXFH7lVqOI"
+"SBHlFdU=";
private void stringToPubkey () {
byte[] keyBytes;
try {
keyBytes = DatatypeConverter.parseBase64Binary(
new String(publicK.getBytes("utf-8"), Charset.forName("UTF-8")));
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey key = keyFactory.generatePublic(spec);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
RSAcryptography test = new RSAcryptography();
test.stringToPubkey();
}
}
Die Fehlermeldung:
Java:
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source)
at java.security.KeyFactory.generatePublic(Unknown Source)
at RSAcryptography.stringToPubkey(RSAcryptography.java:26)
at RSAcryptography.main(RSAcryptography.java:38)
Caused by: java.security.InvalidKeyException: invalid key format
at sun.security.x509.X509Key.decode(Unknown Source)
at sun.security.x509.X509Key.decode(Unknown Source)
at sun.security.rsa.RSAPublicKeyImpl.<init>(Unknown Source)
at sun.security.rsa.RSAKeyFactory.generatePublic(Unknown Source)
... 4 more
Ich bin mit meinem Wissen hier leider am ende. Habe mir auch schon viele Beispiele im Netz angesehen und ausprobiert. Leider hat mir nichts geholfen. Vielleicht habt ihr eine Idee oder einen Vorschlag.
Ich danke euch schon mal.
Viele Grüße
Daywackler