Spec-Zone.ru › OpenJDK 25

Класс PEMDecoder

java.lang.Object
java.security.PEMDecoder
public final class PEMDecoder extends Object
PEMDecoder — это предварительная версия API платформы Java.
Программы могут использовать PEMDecoder только при включённых предварительных функциях.
Предварительные функции могут быть удалены в одном из будущих выпусков или стать постоянными функциями платформы 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
Внешние спецификации
  • RFC 1421: Повышение конфиденциальности электронной почты в Интернете
  • RFC 7468: Текстовые кодировки структур PKIX, PKCS и CMS
См. также:
  • PEMEncoderPREVIEW
  • PEMRecordPREVIEW
  • EncryptedPrivateKeyInfo

Краткое описание методов

Модификатор и тип Метод Описание
DEREncodablePREVIEW decode(InputStream is)
Декодирует и возвращает DEREncodablePREVIEW из указанного InputStream.
<S extends DEREncodablePREVIEW>
S
decode(InputStream is, Class<S> tClass)
Декодирует данные из указанного InputStream и возвращает объект указанного класса.
DEREncodablePREVIEW decode(String str)
Декодирует и возвращает DEREncodablePREVIEW из указанного String.
<S extends DEREncodablePREVIEW>
S
decode(String str, Class<S> tClass)
Декодирует и возвращает DEREncodable указанного класса из заданной строки PEM.
static PEMDecoderPREVIEW of()
Возвращает экземпляр PEMDecoder.
PEMDecoderPREVIEW withDecryption(char[] password)
Возвращает копию этого PEMDecoder, которая декодирует и дешифрует зашифрованные закрытые ключи с помощью указанного пароля.
PEMDecoderPREVIEW withFactory(Provider provider)
Возвращает копию этого экземпляра PEMDecoder, использующую реализации KeyFactory и CertificateFactory из указанного Provider для создания криптографических объектов.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание методов

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
См. также:
  • decode(InputStream)
  • decode(String, Class)

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

Сообщить об ошибке или предложить улучшение
Дополнительные сведения об API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API