Dieser Code erzeugt ein Paar von öffentlichen/privaten Schlüsseln:Java asymmetrische Verschlüsselung: bevorzugte Art und Weise öffentliche/private Schlüssel zu speichern
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair keypair = keyGen.genKeyPair();
PrivateKey privateKey = keypair.getPrivate();
PublicKey publicKey = keypair.getPublic();
Was Ich mag würde wissen, wie Sie in der Regel die öffentlichen Schlüssel speichern:
Option 1: speichern die Bytes
byte[] privateKeyBytes = privateKey.getEncoded();
byte[] publicKeyBytes = publicKey.getEncoded();
// ... write to file
// convert bytes back to public/private keys
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes);
PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
Was ich mag den Code nicht auf konkrete Implementierungen wiezu binden istund X509EncodedKeySpec
.
Option 2: das Modul speichern und Exponent
KeyFactory fact = KeyFactory.getInstance("RSA");
RSAPublicKeySpec pub = fact.getKeySpec(publicKey, RSAPublicKeySpec.class);
RSAPrivateKeySpec priv = fact.getKeySpec(privateKey,RSAPrivateKeySpec.class);
// store modulus and exponent as BigIntegers
BigInteger modulus = pub.getModulus());
BigInteger exponent = pub.getPublicExponent());
// ... write to file
// recreate public key (the same applies to the private key)
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, exponent);
KeyFactory fact = KeyFactory.getInstance("RSA");
PublicKey pubKey = fact.generatePublic(keySpec);
Die zweite Option ist zu implementieren leichter, aber ich weiß nicht, ob es weniger performant sein könnte.
Irgendwelche Ratschläge?
DER ist nicht wirklich ein Format per se, nur die Art und Weise ASN.1 Objekte zu kodieren. –
Für diejenigen, die öffentlich werden wollen. direkt von 'id_rsa.pub' (öffentlicher Schlüssel) statt' id_rsa' (privater Schlüssel) [diese Antwort bietet eine Möglichkeit, das zu tun] (http://stackoverflow.com/a/18290786/813810). – Diego