JEP 524 в JDK 26 — второй preview PEM API
Наконец-то работа с PEM в Java становится похожа на API, а не на набор ручного парсинга, Base64 и странных телодвижений.
Справка: PEM или Privacy-Enhanced Mail - это текстовый контейнер для криптографических данных. Проще говоря – это способ хранить или передавать ключ, сертификат или другой crypto-объект не в бинарном виде, а в текстовом.
Раньше с PEM работали так:
String pem = "-----BEGIN PUBLIC KEY-----\n"
+ Base64.getMimeEncoder(64, "\n".getBytes())
.encodeToString(publicKey.getEncoded())
+ "\n-----END PUBLIC KEY-----";А в обратную сторону, но уже с ручной нормализацией PEM, Base64-декодированием и KeyFactory:
String normalized = pem
.replace("-----BEGIN PUBLIC KEY-----", "")
.replace("-----END PUBLIC KEY-----", "")
.replaceAll("\\s", "");
byte[] der = Base64.getDecoder().decode(normalized);
PublicKey key = KeyFactory.getInstance("EC")
.generatePublic(new X509EncodedKeySpec(der));По факту PEM в Java долгое время был не отдельным API, а набором низкоуровневых шагов, которые разработчик собирал руками.
А теперь это выглядит так:
var encoder = PEMEncoder.of();
String pem = encoder.encodeToString(keyPair);
var decoder = PEMDecoder.of();
KeyPair decoded = decoder.decode(pem, KeyPair.class);То есть ключевую пару можно закодировать в PEM и декодировать обратно буквально в несколько строк.
Во втором preview:
PEMRecordпереименовали в PEMдобавили
decode()расширили поддержку
KeyPairиPKCS8EncodedKeySpecупростили шифрование через
EncryptedPrivateKeyInfo
А так, как все это дело еще в preview, не забываем использовать --enable-preview.
❓ Минус еще один кусок криптографической копипасты из Java-кода. PEM в Java постепенно перестает быть унылым?

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.



















