Spec-Zone.ru › OpenJDK 27

Класс 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) возвращают экземпляр класса, соответствующего типу PEM и реализующего BinaryEncodableПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ, как указано ниже:

  • CERTIFICATE: X509Certificate
  • X509 CRL: X509CRL
  • PUBLIC KEY: PublicKey
  • PRIVATE KEY: PrivateKey или KeyPair (если кодировка содержит открытый ключ)
  • ENCRYPTED PRIVATE KEY: EncryptedPrivateKeyInfo
  • Другие типы: PEMПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ
При использовании с экземпляром PEMDecoder, настроенным для расшифрования:
  • ENCRYPTED PRIVATE KEY: PrivateKey или KeyPair (если кодировка содержит открытый ключ)

Если для типа PEM нет соответствующего класса, decode(String) и decode(InputStream) возвращают объект PEM.

Если код приложения переключается по результату BinaryEncodable, возвращаемому методом decode(String) или decode(InputStream), то конструкцию switch нельзя сделать исчерпывающей, просто указав метку case для каждого разрешенного подтипа, перечисленного для BinaryEncodable; также должна быть метка default или case BinaryEncodable для обработки дополнительных подтипов, которые могут быть добавлены в будущем.

Методы decode(String, Class) и decode(InputStream, Class) принимают параметр, задающий желаемый результат BinaryEncodable. Эти методы избавляют от необходимости приведения типов и полезны, когда возможны несколько представлений. Например, если PEM содержит открытый и закрытый ключи, указание PrivateKey.class возвращает только закрытый ключ. Если задано X509EncodedKeySpec.class, кодировка открытого ключа возвращается в виде X509EncodedKeySpec. Чтобы получить объект PEMПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ, используйте PEM.class. Если указанный класс не соответствует содержимому PEM, возникает ClassCastException.

Помимо перечисленных выше типов, эти методы поддерживают следующие типы PEM и классы BinaryEncodable, если они указаны в качестве параметров:

  • PUBLIC KEY: X509EncodedKeySpec
  • PRIVATE KEY: PKCS8EncodedKeySpec
  • PRIVATE KEY: PublicKey (если кодировка содержит открытый ключ)
  • PRIVATE KEY: X509EncodedKeySpec (если кодировка содержит открытый ключ)
При использовании с экземпляром PEMDecoder, настроенным для расшифрования:
  • ENCRYPTED PRIVATE KEY: PKCS8EncodedKeySpec
  • ENCRYPTED PRIVATE KEY: PublicKey (если кодировка содержит открытый ключ)
  • ENCRYPTED PRIVATE KEY: X509EncodedKeySpec (если кодировка содержит открытый ключ)

Новый экземпляр PEMDecoder создается при настройке с помощью withFactoriesOf(Provider) или withDecryption(char[]). Метод withFactoriesOf(Provider) использует указанный провайдер при получении экземпляров KeyFactory и CertificateFactory, используемых при декодировании. Метод withDecryption(char[]) настраивает декодер для расшифрования и декодирования данных PEM с зашифрованным закрытым ключом, используя заданный пароль. Если расшифрование завершается неудачно, возникает CryptoExceptionПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ. Если зашифрованные данные PEM обрабатываются декодером, не настроенным для расшифрования, возвращается EncryptedPrivateKeyInfo. PEMDecoder, настроенный для расшифрования, также может декодировать незашифрованные данные PEM.

Этот класс неизменяемый и потокобезопасный.

Пример: декодирование закрытого ключа:

    PEMDecoder pd = PEMDecoder.of();
    PrivateKey priKey = pd.decode(priKeyPEM, PrivateKey.class);

Пример: настройка расшифрования и провайдера фабрики:

     PEMDecoder pd = PEMDecoder.of().withDecryption(password).
             withFactoriesOf(provider);
     BinaryEncodable pemData = pd.decode(privKeyPEM);
Примечание по реализации:
Эта реализация декодирует незашифрованный RSA PRIVATE KEY как PrivateKey, X509 CERTIFICATE и X.509 CERTIFICATE как X509Certificate, а CRL как X509CRL. Другие реализации могут распознавать дополнительные типы PEM.
С версии:
25
Внешние спецификации
  • RFC 1421: повышение конфиденциальности электронной почты в Интернете
  • RFC 5958: пакеты асимметричных ключей
  • RFC 7468: текстовые кодировки структур PKIX, PKCS и CMS
См. также:
  • PEMEncoderПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ
  • PEMПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ
  • EncryptedPrivateKeyInfo
  • BinaryEncodableПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ

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

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

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект другому объекту.
protected void finalize()
Устарело и подлежит удалению: этот элемент API может быть удален в будущей версии.
Финализация устарела и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения определенного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения определенного промежутка реального времени.

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

of

public static PEMDecoderPREVIEW of()
Возвращает экземпляр PEMDecoder по умолчанию.
Возвращает:
PEMDecoder по умолчанию

decode

public BinaryEncodablePREVIEW decode(String str)
Декодирует и возвращает BinaryEncodable из заданного String.

Этот метод считывает String, пока не будут найдены данные PEM или не будет достигнут конец String. Если данные PEM не найдены, возникает IllegalArgumentException.

Возвращается BinaryEncodable, наилучшим образом представляющий декодированное содержимое. Если тип PEM не поддерживается, возвращается объект PEM, содержащий идентификатор типа, данные в кодировке Base64 и все начальные данные, предшествующие заголовку PEM. Для типов BinaryEncodable, отличных от PEM, начальные данные игнорируются.

Входные данные интерпретируются как UTF-8.

Параметры:
str — String, содержащий данные PEM
Возвращает:
BinaryEncodable
Вызывает:
IllegalArgumentException — если декодирование завершается неудачно или данные PEM не найдены
NullPointerException — если str имеет значение null
CryptoExceptionPREVIEW — если при расшифровании возникает ошибка
С версии:
27

decode

public BinaryEncodablePREVIEW decode(InputStream is) throws IOException
Декодирует и возвращает BinaryEncodable из заданного InputStream.

Этот метод считывает данные из InputStream до конца завершающей строки PEM или до конца потока. При возникновении ошибки ввода-вывода позиция в потоке может стать несогласованной. Не рекомендуется выполнять дальнейшие операции декодирования с тем же InputStream.

Возвращается BinaryEncodable, наилучшим образом представляющий декодированное содержимое. Если тип PEM не поддерживается, возвращается объект PEM, содержащий идентификатор типа, данные в кодировке Base64 и все начальные данные, предшествующие заголовку PEM. Для типов BinaryEncodable, отличных от PEM, начальные данные игнорируются.

Если данные PEM не найдены, возникает EOFException.

Параметры:
is — InputStream, содержащий данные PEM
Возвращает:
BinaryEncodable
Вызывает:
IOException — если возникает ошибка ввода-вывода или синтаксис PEM некорректен
EOFException — если данные PEM не найдены или поток неожиданно заканчивается
IllegalArgumentException — если декодирование завершается неудачно
NullPointerException — если InputStream имеет значение null
CryptoExceptionPREVIEW — если при расшифровании возникает ошибка
С версии:
27

decode

public <S extends BinaryEncodablePREVIEW> S decode(String str, Class<S> tClass)
Декодирует и возвращает BinaryEncodable указанного класса из заданной строки PEM.

tClass должен быть подходящим классом для типа PEM.

Этот метод считывает String, пока не будут найдены данные PEM или не будет достигнут конец String. Если данные PEM не найдены, возникает IllegalArgumentException.

Если tClass имеет значение PEM.class, возвращается объект PEM, содержащий идентификатор типа, данные в кодировке Base64 и все начальные данные, предшествующие заголовку PEM. Для типов BinaryEncodable, отличных от PEM, начальные данные игнорируются.

Входные данные интерпретируются как UTF-8.

Параметры типа:
S — параметр типа класса, расширяющий BinaryEncodable
Параметры:
str — String, содержащий данные PEM
tClass — класс возвращаемого объекта, расширяющий или реализующий BinaryEncodable
Возвращает:
BinaryEncodable, заданный параметром tClass
Вызывает:
IllegalArgumentException — при ошибке декодирования или отсутствии данных PEM
ClassCastException — если tClass не соответствует типу PEM
NullPointerException — если какое-либо входное значение равно null
CryptoExceptionPREVIEW — если при расшифровании возникает ошибка
С версии:
27

decode

public <S extends BinaryEncodablePREVIEW> S decode(InputStream is, Class<S> tClass) throws IOException
Декодирует и возвращает BinaryEncodable указанного класса из заданного InputStream.

tClass должен быть подходящим классом для типа PEM.

Этот метод считывает данные из InputStream до конца завершающей строки PEM или до конца потока. При возникновении ошибки ввода-вывода позиция в потоке может стать несогласованной. Не рекомендуется выполнять дальнейшие операции декодирования с тем же InputStream.

Если tClass имеет значение PEM.class, возвращается объект PEM, содержащий идентификатор типа, данные в кодировке Base64 и все начальные данные, предшествующие заголовку PEM. Для типов BinaryEncodable, отличных от PEM, начальные данные игнорируются.

Если данные PEM не найдены, возникает EOFException.

Параметры типа:
S — параметр типа класса, расширяющий BinaryEncodable
Параметры:
is — InputStream, содержащий данные PEM
tClass — класс возвращаемого объекта, расширяющий или реализующий BinaryEncodable
Возвращает:
BinaryEncodable типа tClass
Вызывает:
IOException — если возникает ошибка ввода-вывода или синтаксис PEM некорректен
EOFException — если данные PEM не найдены или поток неожиданно заканчивается
IllegalArgumentException — если декодирование завершается неудачно
ClassCastException — если tClass не соответствует типу PEM
NullPointerException — если какое-либо входное значение равно null
CryptoExceptionPREVIEW — если при расшифровании возникает ошибка
С версии:
27
См. также:
  • decode(InputStream)
  • decode(String, Class)

withFactoriesOf

public PEMDecoderPREVIEW withFactoriesOf(Provider provider)
Возвращает копию этого экземпляра PEMDecoder, которая использует реализации KeyFactory и CertificateFactory из указанного Provider для создания криптографических объектов. Все ошибки, связанные с использованием Provider, возникнут во время декодирования.
Параметры:
provider — фабрика Provider
Возвращает:
новый экземпляр PEMDecoder, настроенный с использованием Provider
Вызывает:
NullPointerException — если provider имеет значение null
С версии:
27

withDecryption

public PEMDecoderPREVIEW withDecryption(char[] password)
Возвращает копию этого PEMDecoder, которая декодирует и расшифровывает зашифрованные закрытые ключи с использованием указанного пароля. Возвращенный экземпляр также может декодировать незашифрованные данные PEM.
Параметры:
password — пароль для расшифрования зашифрованных данных PEM. Этот массив копируется и сохраняется в новом экземпляре.
Возвращает:
новый экземпляр PEMDecoder, настроенный для расшифрования
Вызывает:
NullPointerException — если password имеет значение null

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры основных понятий, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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