Класс PEMEncoder
public final class PEMEncoder extends Object
PEMEncoder — это предварительная версия API платформы Java. PEMEncoder реализует кодировщик данных Privacy-Enhanced Mail (PEM). PEM — это текстовый формат кодирования, используемый для хранения и передачи объектов безопасности, таких как асимметричные ключи, сертификаты и списки отзыва сертификатов (CRL). Он определён в RFC 1421 и RFC 7468. PEM состоит из двоичных данных в формате Base64, заключённых между заголовком и завершающей строкой, указывающими тип данных. Кодирование можно выполнять для криптографических объектов Java API, реализующих DEREncodablePREVIEW. Методы encode(DEREncodable) и encodeToString(DEREncodable) кодируют DEREncodable в формат PEM и возвращают данные в виде массива байтов или строки.
Закрытые ключи можно зашифровать и закодировать, настроив PEMEncoder с помощью метода withEncryption(char[]), который принимает пароль и возвращает новый экземпляр PEMEncoder, настроенный для шифрования ключа с помощью этого пароля. В качестве альтернативы закрытый ключ, зашифрованный как объект EncryptedKeyInfo, можно напрямую закодировать в PEM, передав его методам encode или encodeToString.
PKCS #8 2.0 определяет структуру ASN.1 OneAsymmetricKey, которая может содержать как закрытые, так и открытые ключи. Объекты KeyPair, переданные методам encode или encodeToString, кодируются как структура OneAsymmetricKey с типом «PRIVATE KEY».
При кодировании PEMRecordPREVIEW API обрамляет содержимое PEMRecord.content()PREVIEW заголовком и завершающей строкой PEM, соответствующими значению PEMRecord.type()PREVIEW. PEMRecord.leadingData()PREVIEW не включается в результат кодирования. PEMRecord не выполняет проверку допустимости данных.
Ниже перечислены поддерживаемые классы DEREncodable и соответствующие им типы PEM:
-
X509Certificate: CERTIFICATE -
X509CRL: X509 CRL -
PublicKey: PUBLIC KEY -
PrivateKey: PRIVATE KEY -
PrivateKey(если настроен для шифрования): ENCRYPTED PRIVATE KEY -
EncryptedPrivateKeyInfo: ENCRYPTED PRIVATE KEY -
KeyPair: PRIVATE KEY -
X509EncodedKeySpec: PUBLIC KEY -
PKCS8EncodedKeySpec: PRIVATE KEY -
PEMRecord:PEMRecord.type()
Этот класс является неизменяемым и потокобезопасным.
Пример кодирования объекта PrivateKey:
PEMEncoder pe = PEMEncoder.of();
byte[] pemData = pe.encode(privKey);
Пример шифрования и кодирования закрытого ключа с использованием указанного пароля:
PEMEncoder pe = PEMEncoder.of().withEncryption(password);
byte[] pemData = pe.encode(privKey);
- Примечание по реализации:
- Реализация может поддерживать другие типы PEM и объекты
DEREncodable. - С версии:
- 25
- Внешние спецификации
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
byte[] |
encode |
Кодирует указанный DEREncodable и возвращает закодированные данные PEM в массиве байтов. |
String |
encodeToString |
Кодирует указанный DEREncodable и возвращает строку в формате PEM. |
static PEMEncoderPREVIEW |
of() |
Возвращает экземпляр PEMEncoder. |
PEMEncoderPREVIEW |
withEncryption |
Возвращает новый экземпляр PEMEncoder, настроенный для шифрования с использованием алгоритма по умолчанию и заданного пароля. |
Подробное описание методов
of
public static PEMEncoderPREVIEW of()
PEMEncoder.- Возвращает:
- экземпляр
PEMEncoder
encodeToString
public String encodeToString(DEREncodablePREVIEW de)
DEREncodable и возвращает строку в формате PEM.- Параметры:
-
de—DEREncodableдля кодирования - Возвращает:
String, содержащую закодированные данные PEM- Вызывает исключение:
-
IllegalArgumentException— еслиDEREncodableневозможно закодировать -
NullPointerException— еслиdeравноnull - См. также:
encode
public byte[] encode(DEREncodablePREVIEW de)
DEREncodable и возвращает закодированные данные PEM в массиве байтов.- Параметры:
-
de—DEREncodableдля кодирования - Возвращает:
- массив байтов в формате PEM
- Вызывает исключение:
-
IllegalArgumentException— еслиDEREncodableневозможно закодировать -
NullPointerException— еслиdeравноnull - См. также:
withEncryption
public PEMEncoderPREVIEW withEncryption(char[] password)
PEMEncoder, настроенный для шифрования с использованием алгоритма по умолчанию и заданного пароля. С помощью этого настроенного экземпляра можно шифровать только объекты PrivateKey. При кодировании других объектов DEREncodablePREVIEW будет выброшено исключение IllegalArgumentException.
- Примечание по реализации:
- Алгоритм шифрования на основе пароля по умолчанию определяется свойством безопасности
jdk.epkcs8.defaultAlgorithmи использует параметры шифрования по умолчанию выбранного поставщика. Для большей гибкости в выборе параметров шифрования используйтеEncryptedPrivateKeyInfo.encryptKey(PrivateKey, Key, String, AlgorithmParameterSpec, Provider, SecureRandom)PREVIEW, а возвращённый объект используйте сencode(DEREncodable). - Параметры:
-
password— пароль для шифрования. Массив клонируется и сохраняется в новом экземпляре. - Возвращает:
- новый экземпляр
PEMEncoder, настроенный для шифрования - Вызывает исключение:
-
NullPointerException— если пароль равенnull
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/PEMEncoder.html
PEMEncoderтолько при включённых предварительных функциях.