Класс 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) возвращают экземпляр класса, соответствующего типу 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
- Внешние спецификации
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
BinaryEncodablePREVIEW |
decode |
Декодирует и возвращает BinaryEncodable из заданного InputStream. |
<S extends BinaryEncodablePREVIEW> |
decode |
Декодирует и возвращает BinaryEncodable указанного класса из заданного InputStream. |
BinaryEncodablePREVIEW |
decode |
Декодирует и возвращает BinaryEncodable из заданного String. |
<S extends BinaryEncodablePREVIEW> |
decode |
Декодирует и возвращает BinaryEncodable указанного класса из заданной строки PEM. |
static PEMDecoderPREVIEW |
of() |
Возвращает экземпляр PEMDecoder по умолчанию. |
PEMDecoderPREVIEW |
withDecryption |
Возвращает копию этого PEMDecoder, которая декодирует и расшифровывает зашифрованные закрытые ключи с использованием указанного пароля. |
PEMDecoderPREVIEW |
withFactoriesOf |
Возвращает копию этого экземпляра PEMDecoder, который использует реализации KeyFactory и CertificateFactory из указанного Provider для создания криптографических объектов. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело и подлежит удалению: этот элемент API может быть удален в будущей версии. Финализация устарела и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения определенного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения определенного промежутка реального времени. |
Подробное описание методов
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
- См. также:
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
© 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.
PEMDecoderтолько при включенных предварительных функциях.