¿Cuál es el equivalente de openssl de usar KeyPairGenerator de java?

4

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.

    
pregunta void.massive 14.10.2015 - 01:04
fuente

0 respuestas

Lea otras preguntas en las etiquetas