$ java --enable-preview -cp ... EncryptedKeys (27.0.1.0.2+1) == write an encrypted key with the defaults [-----BEGIN ENCRYPTED PRIVATE KEY-----, -----END ENCRYPTED PRIVATE KEY-----] default algorithm: PBEWithHmacSHA256AndAES_128 default iteration count: 4096, salt bytes: 20 == read it back ok: withDecryption(password) returns the original key == choose the algorithm and cost yourself PBEWithHmacSHA512AndAES_256, iterations 600000 ok: getKey(password) on the decoded EncryptedPrivateKeyInfo works too == a file written by openssl pkcs8 -topk8 -v2 aes-256-cbc PBEWithHmacSHA256AndAES_256 ok: decrypts to the same key as the unencrypted file == failures no password, ask for PrivateKey !! java.lang.ClassCastException: Cannot cast javax.crypto.EncryptedPrivateKeyInfo to java.security.PrivateKey no password, no class -> EncryptedPrivateKeyInfo PBEWithHmacSHA256AndAES_256 wrong password !! javax.crypto.CryptoException: java.security.InvalidKeyException: Cannot retrieve the PKCS8EncodedKeySpec password on a key that is not encrypted -> PrivateKey RSA openssl 'traditional' encrypted (Proc-Type: 4,ENCRYPTED) !! java.lang.IllegalArgumentException: java.security.InvalidKeyException: Invalid PKCS#1 encoding exit=0