Qual è l'equivalente di openssl dell'uso di KeyPairGenerator di java?

4

Uso java's KeyPairGenerator per generare chiavi pubbliche / private all'interno di un programma in modo da poter crittografare e decodificare i file (anche utilizzando i metodi java encrypt / decrypt). Voglio essere in grado di passare a utilizzare openssl per generare queste coppie di chiavi pubbliche private, ma continuo a ricevere eccezioni di padding quando decrypt i miei file. Ad esempio, invece di usare java's KeyPairGenerator, provo a usare openssl per generare le chiavi:

openssl rsa -in keypair.pem -outform DEF -pubout -out public.der
openssl pkcs8 -topk8 -nocrypt -in keypair.pem -outform DER -out private.der

Dove cerco di utilizzare i file DER per crittografare / decodificare i miei file.

Suppongo che questo significhi che il formato delle chiavi nei miei comandi openssl non coincide con il funzionamento di KeyPairGenerator di java. Ecco uno snippet del mio codice di generazione della chiave:

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();
}

Qual è l'equivalente di openssl dell'uso di KeyPairGenerator di java? Si noti inoltre che l'uso di pacchetti esterni come il castello gonfiabile non è un'opzione.

    
posta void.massive 14.10.2015 - 01:04
fonte

0 risposte