Класс PEMDecoder
public final class PEMDecoder extends Object
PEMDecoder — это предварительная версия API платформы Java. PEMDecoder реализует декодер данных Privacy-Enhanced Mail (PEM). PEM — это текстовая кодировка, используемая для хранения и передачи объектов безопасности, таких как асимметричные ключи, сертификаты и списки отзыва сертификатов (CRL). Она определена в RFC 1421 и RFC 7468. PEM состоит из двоичного представления в формате Base64, заключённого между заголовком и завершающей строкой, указывающими тип данных. Методы decode(String) и decode(InputStream) возвращают экземпляр класса, соответствующего типу данных и реализующего DEREncodablePREVIEW.
Ниже перечислены поддерживаемые типы PEM и типы DEREncodable, в которые они декодируются:
- CERTIFICATE :
X509Certificate - X509 CRL :
X509CRL - PUBLIC KEY :
PublicKey - PUBLIC KEY :
X509EncodedKeySpec(поддерживается только при передаче в качестве параметраClass) - PRIVATE KEY :
PrivateKey - PRIVATE KEY :
PKCS8EncodedKeySpec(поддерживается только при передаче в качестве параметраClass) - PRIVATE KEY :
KeyPair(если кодировка также содержит открытый ключ) - ENCRYPTED PRIVATE KEY :
EncryptedPrivateKeyInfo - ENCRYPTED PRIVATE KEY :
PrivateKey(если настроено дешифрование) - Другие типы :
PEMRecord
Для типов PublicKey и PrivateKey возвращается подкласс, специфичный для алгоритма, если используемый алгоритм поддерживается. Например, для ключей эллиптической кривой возвращаются ECPublicKey и ECPrivateKey.
Если для типа PEM нет соответствующего класса, методы decode(String) и decode(InputStream) возвращают PEMRecordPREVIEW.
Методы decode(String, Class) и decode(InputStream, Class) принимают параметр класса, определяющий тип возвращаемого DEREncodable. Эти методы полезны при извлечении данных или изменении класса возвращаемого значения. Например, если PEM содержит открытый и закрытый ключи, параметр класса позволяет указать, какой из них следует вернуть. Используйте PrivateKey.class, чтобы вернуть только закрытый ключ. Если параметр класса задан как X509EncodedKeySpec.class, открытый ключ будет возвращён в этом формате. Любые данные PEM можно декодировать в PEMRecord, указав PEMRecord.class. Если параметр класса не соответствует содержимому PEM, будет выброшено исключение ClassCastException.
Новый экземпляр PEMDecoder создаётся при настройке с помощью withFactory(Provider) и/или withDecryption(char[]). Метод withFactory(Provider) настраивает декодер на использование только экземпляров KeyFactory и CertificateFactory из указанного Provider. Метод withDecryption(char[]) настраивает декодер на дешифрование всех зашифрованных данных PEM с закрытым ключом с помощью указанного пароля. Настройка экземпляра для дешифрования не препятствует декодированию незашифрованных данных PEM. Если не удаётся дешифровать зашифрованные данные PEM, будет выброшено исключение RuntimeException. Если для зашифрованных данных PEM с закрытым ключом используется декодер, не настроенный для дешифрования, возвращается объект EncryptedPrivateKeyInfo.
Этот класс является неизменяемым и потокобезопасным.
Пример декодирования объекта PrivateKey:
PEMDecoder pd = PEMDecoder.of();
PrivateKey priKey = pd.decode(priKeyPEM, PrivateKey.class);
Пример PEMDecoder, настроенного для дешифрования и с поставщиком фабрики:
PEMDecoder pd = PEMDecoder.of().withDecryption(password).
withFactory(provider);
byte[] pemData = pd.decode(privKey);
- Примечание по реализации:
- Реализация может поддерживать другие типы PEM и объекты
DEREncodable. Эта реализация дополнительно поддерживает следующие типы PEM:X509 CERTIFICATE,X.509 CERTIFICATE,CRLиRSA PRIVATE KEY. - Начиная с версии:
- 25
- Внешние спецификации
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
DEREncodablePREVIEW |
decode |
|
<S extends DEREncodablePREVIEW> |
decode |
Декодирует данные из указанного InputStream и возвращает объект указанного класса. |
DEREncodablePREVIEW |
decode |
|
<S extends DEREncodablePREVIEW> |
decode |
Декодирует и возвращает DEREncodable указанного класса из заданной строки PEM. |
static PEMDecoderPREVIEW |
of() |
Возвращает экземпляр PEMDecoder. |
PEMDecoderPREVIEW |
withDecryption |
Возвращает копию этого PEMDecoder, которая декодирует и дешифрует зашифрованные закрытые ключи с помощью указанного пароля. |
PEMDecoderPREVIEW |
withFactory |
Возвращает копию этого экземпляра PEMDecoder, использующую реализации KeyFactory и CertificateFactory из указанного Provider для создания криптографических объектов. |
Подробное описание методов
of
public static PEMDecoderPREVIEW of()
PEMDecoder.- Возвращает:
- экземпляр
PEMDecoder
decode
public DEREncodablePREVIEW decode(String str)
DEREncodablePREVIEW из указанного String. Этот метод считывает String, пока не будут найдены данные PEM или не будет достигнут конец String. Если данные PEM не найдены, выбрасывается IllegalArgumentException.
Если тип PEM поддерживается, этот метод возвращает криптографический объект Java API, например PrivateKey. Любые данные, не относящиеся к PEM и предшествующие заголовку PEM, игнорируются декодером. В противном случае возвращается PEMRecordPREVIEW, содержащий идентификатор типа и данные в кодировке Base64. Любые данные, не относящиеся к PEM и предшествующие заголовку PEM, сохраняются в leadingData.
Данные, считываемые этим методом, интерпретируются как UTF-8.
- Параметры:
-
str— строка, содержащая данные PEM - Возвращает:
- объект
DEREncodable - Исключения:
-
IllegalArgumentException— при ошибке декодирования или если данные PEM не найдены -
NullPointerException— еслиstrравно null
decode
public DEREncodablePREVIEW decode(InputStream is) throws IOException
DEREncodablePREVIEW из указанного InputStream. Этот метод считывает данные из InputStream до конца завершающей строки PEM или до конца потока. При возникновении ошибки ввода-вывода позиция чтения в потоке может стать несогласованной. Рекомендуется не выполнять дальнейшие операции декодирования с InputStream.
Если тип PEM поддерживается, этот метод возвращает криптографический объект Java API, например PrivateKey. Любые данные, не относящиеся к PEM и предшествующие заголовку PEM, игнорируются декодером. В противном случае возвращается PEMRecordPREVIEW, содержащий идентификатор типа и данные в кодировке Base64. Любые данные, не относящиеся к PEM и предшествующие заголовку PEM, сохраняются в leadingData.
Если данные PEM не найдены, выбрасывается IllegalArgumentException.
- Параметры:
-
is— InputStream, содержащий данные PEM - Возвращает:
- объект
DEREncodable - Исключения:
-
IOException— при ошибке ввода-вывода или синтаксической ошибке PEM, из-за которойInputStreamне удалось завершить декодирование. -
EOFException— в концеInputStream -
IllegalArgumentException— при ошибке декодирования -
NullPointerException— еслиisравно null
decode
public <S extends DEREncodablePREVIEW> S decode(String str, Class<S> tClass)
DEREncodable указанного класса из заданной строки PEM. tClass должен наследовать DEREncodablePREVIEW и быть подходящим классом для данного типа PEM. Этот метод считывает String, пока не будут найдены данные PEM или не будет достигнут конец String. Если данные PEM не найдены, выбрасывается IllegalArgumentException.
Если параметр класса — PEMRecord.class, возвращается PEMRecord, содержащий идентификатор типа и кодировку Base64. Любые данные, не относящиеся к PEM и предшествующие заголовку PEM, сохраняются в leadingData. При использовании других параметров класса предшествующие данные, не относящиеся к PEM, не возвращаются.
Данные, считываемые этим методом, интерпретируются как UTF-8.
- Параметры типа:
S— параметр типа класса, наследующегоDEREncodable- Параметры:
-
str— строка, содержащая данные PEM -
tClass— класс возвращаемого объекта, реализующийDEREncodable - Возвращает:
DEREncodable, заданный параметромtClass- Исключения:
-
IllegalArgumentException— при ошибке декодирования или если данные PEM не найдены -
ClassCastException— еслиtClassнедопустим для данного типа PEM -
NullPointerException— если любое из входных значений равно null
decode
public <S extends DEREncodablePREVIEW> S decode(InputStream is, Class<S> tClass) throws IOException
InputStream и возвращает объект указанного класса. Класс должен наследовать DEREncodablePREVIEW и быть подходящим классом для данного типа PEM. Этот метод считывает данные из InputStream до конца завершающей строки PEM или до конца потока. При возникновении ошибки ввода-вывода позиция чтения в потоке может стать несогласованной. Рекомендуется не выполнять дальнейшие операции декодирования с InputStream.
Если параметр класса — PEMRecord.class, возвращается PEMRecord, содержащий идентификатор типа и кодировку Base64. Любые данные, не относящиеся к PEM и предшествующие заголовку PEM, сохраняются в leadingData. При использовании других параметров класса предшествующие данные, не относящиеся к PEM, не возвращаются.
Если данные PEM не найдены, выбрасывается IllegalArgumentException.
- Параметры типа:
S— параметр типа класса, наследующегоDEREncodable.- Параметры:
-
is— InputStream, содержащий данные PEM -
tClass— класс возвращаемого объекта, реализующийDEREncodable. - Возвращает:
- объект типа
DEREncodable, приведённый к типуtClass - Исключения:
-
IOException— при ошибке ввода-вывода или синтаксической ошибке PEM, из-за которойInputStreamне удалось завершить декодирование. -
EOFException— в концеInputStream -
IllegalArgumentException— при ошибке декодирования -
ClassCastException— еслиtClassнедопустим для данного типа PEM -
NullPointerException— если любое из входных значений равно null - См. также:
withFactory
public PEMDecoderPREVIEW withFactory(Provider provider)
PEMDecoder, использующую реализации KeyFactory и CertificateFactory из указанного Provider для создания криптографических объектов. Любые ошибки при использовании Provider возникнут во время декодирования.- Параметры:
-
provider— поставщик фабрики - Возвращает:
- новый экземпляр PEMEncoder, настроенный для использования
Provider. - Исключения:
-
NullPointerException— еслиproviderравно null
withDecryption
public PEMDecoderPREVIEW withDecryption(char[] password)
PEMDecoder, которая декодирует и дешифрует зашифрованные закрытые ключи с помощью указанного пароля. Незашифрованные данные PEM по-прежнему можно декодировать с помощью этого экземпляра.- Параметры:
-
password— пароль для дешифрования зашифрованных данных PEM. Этот массив копируется и сохраняется в новом экземпляре. - Возвращает:
- новый экземпляр PEMEncoder, настроенный для дешифрования
- Исключения:
-
NullPointerException— еслиpasswordравно 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/PEMDecoder.html
PEMDecoderтолько при включённых предварительных функциях.