Закрытый ключ OpenSSL находится в нестандартном формате, в то время как код Java создает стандартный закрытый ключ в кодировке PKCS- # 8.
OpenSSL может преобразовать стандартный формат ключа в нестандартныйстандартная форма.Вы можете написать Java-код, чтобы сделать то же самое, но для этого требуются сторонние библиотеки и хорошие знания ASN.1.
Чтобы преобразовать ключ PKCS # 8 в формат OpenSSL, используйте OpenSSL pkcs8
utility.
openssl pkcs8 -nocrypt -inform der < pvt.der > pvt.pem
Чтобы преобразовать ключ RSA, хранящийся в формате SubjectPublicKeyInfo в кодировке DER, в формат PEM, используйте утилиту OpenSSL rsa
.
openssl rsa -pubin -inform der < pub.der > pub.pem
Предполагается, что закрытый ключхранится в двоичном (DER) формате, а не в кодировке Base-64.Код Java для создания и хранения ключей выглядит следующим образом:
KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
KeyPair pair = gen.generateKeyPair();
FileOutputStream ospvt = new FileOutputStream("pvt.der");
try {
ospvt.write(pair.getPrivate().getEncoded());
ospvt.flush();
} finally {
ospvt.close();
}
FileOutputStream ospub = new FileOutputStream("pub.der");
try {
ospub.write(pair.getPublic().getEncoded());
ospub.flush();
} finally {
ospub.close();
}