He estado usando KeyPairGenerator de java para generar claves públicas / privadas dentro de un programa para poder cifrar y descifrar archivos (también utilizando métodos de cifrado / descifrado de java). Quiero poder pasar a usar openssl para generar estos pares de llaves públicas y privadas, sin embargo, sigo obteniendo excepciones de relleno cuando descifro mis archivos. Por ejemplo, en lugar de usar KeyPairGenerator de java, trato de usar openssl para generar claves:
openssl rsa -in keypair.pem -outform DEF -pubout -out public.der
openssl pkcs8 -topk8 -nocrypt -in keypair.pem -outform DER -out private.der
Donde intento usar los archivos DER para cifrar / descifrar mis archivos.
Supongo que esto significa que el formato de las teclas en mis comandos de openssl no coincide con el funcionamiento del KeyPairGenerator de java. Aquí hay un fragmento de mi código de generación de clave:
public void createPublicPrivateKeys() throws IOException, NoSuchAlgorithmException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
logger.info("Password to encrypt the private key: ");
String password = in.readLine();
logger.info("Generating an RSA keypair.");
// Create an RSA key key pair
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(4096);
KeyPair keyPair = keyPairGenerator.genKeyPair();
logger.info("Done generating the keypair.\n");
// Write public key out to a file
String publicKeyFilename = "publicKey.der";
logger.info("Public key filename: " + publicKeyFilename);
// Get encoded form of the public key for future usage -- this is X.509 by default.
byte[] publicKeyBytes = keyPair.getPublic().getEncoded();
// Write the encoded public key
FileOutputStream fos = new FileOutputStream(publicKeyFilename);
fos.write(publicKeyBytes);
fos.close();
String privateKeyFilename = "privateKey.der";
logger.info("Private key filename: " + privateKeyFilename);
// Get the encoded form -- PKCS#8 by default.
byte[] privateKeyBytes = keyPair.getPrivate().getEncoded();
// Encrypt the password
byte[] encryptedPrivateKeyBytes = new byte[0];
try {
encryptedPrivateKeyBytes = passwordEncrypt(password.toCharArray(), privateKeyBytes);
} catch (Exception e) {
e.printStackTrace();
}
fos = new FileOutputStream(privateKeyFilename);
fos.write(encryptedPrivateKeyBytes);
fos.close();
}
¿Cuál es el equivalente en openssl de usar KeyPairGenerator de java? También tenga en cuenta que el uso de paquetes externos como el castillo hinchable no es una opción.