Ich habe einen privaten Schlüssel generiert mit:
openssl genrsa [-out file] –des3
Danach habe ich einen öffentlichen Schlüssel generiert mit:
openssl rsa –pubout -in private.key [-out file]
Ich möchte einige Nachrichten mit meinem privaten Schlüssel signieren und einige andere Nachrichten mit meinem öffentlichen Schlüssel überprüfen, indem ich folgenden Code verwende:
public String sign(String message) throws SignatureException{
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initSign(privateKey);
sign.update(message.getBytes("UTF-8"));
return new String(Base64.encodeBase64(sign.sign()),"UTF-8");
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
public boolean verify(String message, String signature) throws SignatureException{
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initVerify(publicKey);
sign.update(message.getBytes("UTF-8"));
return sign.verify(Base64.decodeBase64(signature.getBytes("UTF-8")));
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
Ich habe eine Lösung gefunden, um meinen privaten Schlüssel in das PKCS8-Format zu konvertieren und zu laden. Es funktioniert mit einem Code wie diesem:
public PrivateKey getPrivateKey(String filename) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory kf =
KeyFactory.getInstance("RSA");
return kf.generatePrivate(spec);
}
Und schließlich lautet meine Frage: Wie lade ich meinen öffentlichen RSA-Schlüssel aus einer Datei?
Ich denke, vielleicht muss ich meine öffentliche Schlüsseldatei in das x509-Format konvertieren und verwenden X509EncodedKeySpec
. Aber wie kann ich das machen?
Antworten:
Unten finden Sie die relevanten Informationen über den Link, den Zaki bereitgestellt hat.
Privat Schlüssel
Öffentlicher Schlüssel
quelle
InvalidKeyException
als ich es mit Dateien versucht habe, die ich mitssh-keygen -t rsa -b 2048
Befehl generiert habe . Mit Dateien, die mit den Befehlen in der Lösung generiert wurden, funktionierte es..pem
Format anstatt arbeiten.der
, die PemReader-Klasse von BouncyCastle verwenden können, um ihn zu analysieren, bevor Sie ihn an übergebenX509EncodedKeySpec
. Denken Sie daran, beim Erstellen der KeyFactory-Instanz auch den BouncyCastle-Anbieter anzugeben.Dieses Programm macht fast alles mit öffentlichen und privaten Schlüsseln. Das der-Format kann erhalten werden, aber Rohdaten werden gespeichert (ohne base64 zu codieren). Ich hoffe das hilft Programmierern.
quelle
Sobald Sie Ihren Schlüssel in einer PEM-Datei gespeichert haben, können Sie ihn mithilfe der von BouncyCastle bereitgestellten Klassen PemObject und PemReader problemlos zurücklesen, wie in diesem Lernprogramm gezeigt .
Erstellen Sie eine PemFile-Klasse, die die Dateibehandlung kapselt:
Instanziieren Sie dann wie gewohnt private und öffentliche Schlüssel:
Hoffe das hilft.
quelle
Der folgende Code funktioniert absolut gut für mich und funktioniert. Dieser Code liest den privaten und öffentlichen RSA-Schlüssel durch Java-Code. Sie können auf http://snipplr.com/view/18368/ verweisen.
quelle