Класс Cipher
- Прямые известные подклассы:
NullCipher
public class Cipher extends Object
Для создания объекта Cipher, приложение вызывает метод getInstance шифра и передает ему имя запрошенной трансформации. Допускается также указать имя поставщика.
Трансформация — это строка, описывающая операцию (или набор операций), которые должны быть выполнены над заданным входом, для получения некоторого выхода. Трансформация всегда включает имя криптографического алгоритма (например, AES) и может быть дополнена режимом обработки и схемой заполнения.
Трансформация имеет вид:
- "алгоритм/режим/заполнение" или
- "алгоритм"
(в последнем случае используются значения по умолчанию для режима и схемы заполнения, специфичные для поставщика). Например, следующая строка является допустимой трансформацией:
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
Используя режимы, такие как CFB и OFB, блочные шифры могут шифровать данные в блоках, меньших размера блока шифра. При запросе такого режима можно необязательно указать количество бит, обрабатываемых за раз, добавив это число к имени режима, как показано в трансформациях "AES/CFB8/NoPadding" и "AES/OFB32/PKCS5Padding". Если такое число не указано, используется значение по умолчанию, специфичное для поставщика. (См. Документацию поставщиков JDK для значений по умолчанию JDK Providers.) Таким образом, блочные шифры могут быть преобразованы в потоковые шифры, ориентированные на байты, используя 8-битный режим, такой как CFB8 или OFB8. Режимы, такие как аутентифицированное шифрование с дополнительными связанными данными (AEAD), обеспечивают гарантии аутентичности как для конфиденциальных данных, так и для дополнительных связанных данных (AAD), которые не шифруются. (Дополнительную информацию об алгоритмах AEAD и AAD, таких как GCM/CCM, см. в RFC 5116 ). Конфиденциальные и AAD данные могут использоваться при расчете аутентификационного тега (аналогично Mac). Этот тег добавляется к шифрованному тексту при шифровании и проверяется при дешифровании.
Режимы AEAD, такие как GCM/CCM, выполняют все вычисления аутентичности AAD до начала вычислений аутентичности шифрованного текста. Чтобы избежать необходимости буферизации шифрованного текста в реализациях, все данные AAD должны быть предоставлены реализациям GCM/CCM (через методы updateAAD) **до** обработки шифрованного текста (через методы update и doFinal).
Обратите внимание, что режим GCM имеет требование уникальности для IV, используемых при шифровании с заданным ключом. При повторении IV для шифрования GCM такие использования уязвимы для атак подделки. Поэтому после каждой операции шифрования с использованием режима GCM вызывающие стороны должны повторно инициализировать объекты Cipher с параметрами GCM, имеющими другое значение IV.
GCMParameterSpec s = ...;
cipher.init(..., s);
// If the GCM parameters were generated by the provider, it can
// be retrieved by:
// cipher.getParameters().getParameterSpec(GCMParameterSpec.class);
cipher.updateAAD(...); // AAD
cipher.update(...); // Multi-part update
cipher.doFinal(...); // conclusion of operation
// Use a different IV value for every encryption
byte[] newIv = ...;
s = new GCMParameterSpec(s.getTLen(), newIv);
cipher.init(..., s);
...
Алгоритмы ChaCha20 и ChaCha20-Poly1305 имеют аналогичное требование к уникальным nonce с заданным ключом. После каждой операции шифрования или дешифрования вызывающие стороны должны повторно инициализировать свои шифры ChaCha20 или ChaCha20-Poly1305 с параметрами, указывающими другое значение nonce. Дополнительную информацию об алгоритмах ChaCha20 и ChaCha20-Poly1305 см. в RFC 7539. Каждая реализация платформы Java обязана поддерживать следующие стандартные Cipher трансформации объектов с размерами ключа в скобках:
-
AES/CBC/NoPadding(128) -
AES/CBC/PKCS5Padding(128) -
AES/ECB/NoPadding(128) -
AES/ECB/PKCS5Padding(128) -
AES/GCM/NoPadding(128) -
DESede/CBC/NoPadding(168) -
DESede/CBC/PKCS5Padding(168) -
DESede/ECB/NoPadding(168) -
DESede/ECB/PKCS5Padding(168) -
RSA/ECB/PKCS1Padding(1024, 2048) -
RSA/ECB/OAEPWithSHA-1AndMGF1Padding(1024, 2048) -
RSA/ECB/OAEPWithSHA-256AndMGF1Padding(1024, 2048)
- С:
- 1.4
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
DECRYPT_MODE |
Константа, используемая для инициализации шифра в режиме дешифрования. |
static final int |
ENCRYPT_MODE |
Константа, используемая для инициализации шифра в режиме шифрования. |
static final int |
PRIVATE_KEY |
Константа, используемая для обозначения того, что ключи, которые нужно разворачивать, являются «приватными ключами». |
static final int |
PUBLIC_KEY |
Константа, используемая для обозначения того, что ключи, которые нужно разворачивать, являются «публичными ключами». |
static final int |
SECRET_KEY |
Константа, используемая для обозначения того, что ключи, которые нужно разворачивать, являются «секретными ключами». |
static final int |
UNWRAP_MODE |
Константа, используемая для инициализации шифра в режиме разворачивания ключа. |
static final int |
WRAP_MODE |
Константа, используемая для инициализации шифра в режиме упаковки ключа. |
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Создаёт объект Cipher. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final byte[] |
doFinal() |
Завершает многоэтапную операцию шифрования или дешифрования, в зависимости от того, как был инициализирован этот объект Cipher. |
final byte[] |
doFinal |
Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. |
final int |
doFinal |
Завершает многоэтапную операцию шифрования или дешифрования, в зависимости от того, как был инициализирован этот объект Cipher. |
final byte[] |
doFinal |
Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. |
final int |
doFinal |
Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. |
final int |
doFinal |
Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. |
final int |
doFinal |
Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. |
final String |
getAlgorithm() |
Возвращает имя алгоритма этого объекта Cipher. |
final int |
getBlockSize() |
Возвращает размер блока (в байтах). |
final ExemptionMechanism |
getExemptionMechanism() |
Возвращает объект механизма исключения, используемый с этим объектом Cipher. |
static final Cipher |
getInstance |
Возвращает объект Cipher, реализующий указанное преобразование. |
static final Cipher |
getInstance |
Возвращает объект Cipher, реализующий указанное преобразование. |
static final Cipher |
getInstance |
Возвращает объект Cipher, реализующий указанное преобразование. |
final byte[] |
getIV() |
Возвращает вектор инициализации (IV) в новом буфере. |
static final int |
getMaxAllowedKeyLength |
Возвращает максимальную длину ключа для указанного преобразования в соответствии с установленными политиками юрисдикции JCE. |
static final AlgorithmParameterSpec |
getMaxAllowedParameterSpec |
Возвращает объект {code AlgorithmParameterSpec}, содержащий максимальное значение параметра Cipher в соответствии с файлом политики юрисдикции. |
final int |
getOutputSize |
Возвращает длину в байтах, которая должна иметь буфер вывода, чтобы содержать результат следующей операции update или doFinal, с учётом длины входных данных inputLen (в байтах). |
final AlgorithmParameters |
getParameters() |
Возвращает параметры, используемые с этим объектом Cipher. |
final Provider |
getProvider() |
Возвращает провайдера этого объекта Cipher. |
final void |
init |
Инициализирует этот объект Cipher с публичным ключом из данного сертификата. |
final void |
init |
Инициализирует этот объект Cipher с публичным ключом из данного сертификата и источником случайных чисел. |
final void |
init |
Инициализирует этот объект Cipher с ключом. |
final void |
init |
Инициализирует этот объект Cipher с ключом и набором параметров алгоритма. |
final void |
init |
Инициализирует этот объект Cipher с ключом, набором параметров алгоритма и источником случайных чисел. |
final void |
init |
Инициализирует этот объект Cipher с ключом и источником случайных чисел. |
final void |
init |
Инициализирует этот объект Cipher с ключом и набором параметров алгоритма. |
final void |
init |
Инициализирует этот объект Cipher с ключом, набором параметров алгоритма и источником случайных чисел. |
String |
toString() |
Возвращает представление String этого объекта Cipher. |
final Key |
unwrap |
Разворачивает ранее упакованный ключ. |
final byte[] |
update |
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект Cipher), обрабатывая другой фрагмент данных. |
final byte[] |
update |
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект Cipher), обрабатывая другой фрагмент данных. |
final int |
update |
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект Cipher), обрабатывая другой фрагмент данных. |
final int |
update |
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект Cipher), обрабатывая другой фрагмент данных. |
final int |
update |
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект Cipher), обрабатывая другой фрагмент данных. |
final void |
updateAAD |
Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD). |
final void |
updateAAD |
Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD), используя подмножество предоставленного буфера. |
final void |
updateAAD |
Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD). |
final byte[] |
wrap |
Упаковывает ключ. |
Подробное описание полей
ENCRYPT_MODE
public static final int ENCRYPT_MODE
- См. также:
DECRYPT_MODE
public static final int DECRYPT_MODE
- См. также:
WRAP_MODE
public static final int WRAP_MODE
- См. также:
UNWRAP_MODE
public static final int UNWRAP_MODE
- См. также:
PUBLIC_KEY
public static final int PUBLIC_KEY
- См. также:
PRIVATE_KEY
public static final int PRIVATE_KEY
- См. также:
SECRET_KEY
public static final int SECRET_KEY
- См. также:
Подробное описание конструкторов
Cipher
protected Cipher(CipherSpi cipherSpi, Provider provider, String transformation)
Cipher. - Параметры:
-
cipherSpi- делегат -
provider- поставщик -
transformation- преобразование - Исключения:
-
NullPointerException- еслиproviderявляетсяnull -
IllegalArgumentException- если предоставленные аргументы считаются недопустимыми для построения объектаCipher
Подробное описание методов
getInstance
public static final Cipher getInstance(String transformation) throws NoSuchAlgorithmException, NoSuchPaddingException
Cipher, реализующий указанное преобразование. Этот метод проходит по списку зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект Cipher, инкапсулирующий реализацию CipherSpi от первого поставщика, который поддерживает указанный алгоритм.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Примечание API:
- Рекомендуется использовать преобразование, которое полностью определяет алгоритм, режим и заполнение. Если этого не сделать, поставщик воспользуется значениями по умолчанию для режима и заполнения, которые могут не соответствовать требованиям безопасности вашего приложения.
- Примечание реализации:
- Реализация JDK Reference Implementation дополнительно использует свойство
jdk.security.provider.preferredSecurityдля определения предпочтительного порядка поставщиков для указанного алгоритма. Это может отличаться от порядка поставщиков, возвращаемого методомSecurity.getProviders(). См. также раздел Преобразования шифрования документа JDK Providers для получения информации о значениях по умолчанию для преобразований, используемых поставщиками JDK. - Параметры:
-
transformation- имя преобразования, например, AES/CBC/PKCS5Padding. См. раздел Шифр в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах преобразований. - Возвращает:
- объект
Cipher, реализующий затребованное преобразование - Исключения:
-
NoSuchAlgorithmException- еслиtransformationявляетсяnull, пустым, в неверном формате, или если ни один поставщик не поддерживает реализациюCipherSpiдля указанного алгоритма -
NoSuchPaddingException- еслиtransformationсодержит схему заполнения, которая недоступна - См. также:
getInstance
public static final Cipher getInstance(String transformation, String provider) throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException
Cipher, реализующий указанное преобразование. Возвращается новый объект Cipher, инкапсулирующий реализацию CipherSpi от указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Примечание API:
- Рекомендуется использовать преобразование, которое полностью определяет алгоритм, режим и заполнение. Если этого не сделать, поставщик воспользуется значениями по умолчанию для режима и заполнения, которые могут не соответствовать требованиям безопасности вашего приложения.
- Примечание реализации:
- См. раздел Преобразования шифрования документа JDK Providers для получения информации о значениях по умолчанию для преобразований, используемых поставщиками JDK.
- Параметры:
-
transformation- имя преобразования, например, AES/CBC/PKCS5Padding. См. раздел Шифр в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах преобразований. -
provider- имя поставщика - Возвращает:
- объект
Cipher, реализующий затребованное преобразование - Исключения:
-
IllegalArgumentException- еслиproviderявляетсяnullили пустым -
NoSuchAlgorithmException- еслиtransformationявляетсяnull, пустым, в неверном формате, или если реализацияCipherSpiдля указанного алгоритма недоступна от указанного поставщика -
NoSuchPaddingException- еслиtransformationсодержит схему заполнения, которая недоступна -
NoSuchProviderException- если указанный поставщик не зарегистрирован в списке поставщиков безопасности - См. также:
getInstance
public static final Cipher getInstance(String transformation, Provider provider) throws NoSuchAlgorithmException, NoSuchPaddingException
Cipher, реализующий указанное преобразование. Возвращается новый объект Cipher, инкапсулирующий реализацию CipherSpi от указанного объекта provider. Обратите внимание, что указанный объект provider не обязательно должен быть зарегистрирован в списке поставщиков.
- Примечание API:
- Рекомендуется использовать преобразование, которое полностью определяет алгоритм, режим и заполнение. Если этого не сделать, поставщик воспользуется значениями по умолчанию для режима и заполнения, которые могут не соответствовать требованиям безопасности вашего приложения.
- Примечание реализации:
- См. раздел Преобразования шифрования документа JDK Providers для получения информации о значениях по умолчанию для преобразований, используемых поставщиками JDK.
- Параметры:
-
transformation- имя преобразования, например, AES/CBC/PKCS5Padding. См. раздел Шифр в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах преобразований. -
provider- поставщик - Возвращает:
- объект
Cipher, реализующий затребованное преобразование - Исключения:
-
IllegalArgumentException- еслиproviderявляетсяnull -
NoSuchAlgorithmException- еслиtransformationявляетсяnull, пустым, в неверном формате, или если реализацияCipherSpiдля указанного алгоритма недоступна от указанного объектаprovider -
NoSuchPaddingException- еслиtransformationсодержит схему заполнения, которая недоступна - См. также:
getProvider
public final Provider getProvider()
Cipher. - Возвращает:
- поставщик этого объекта
Cipher
getAlgorithm
public final String getAlgorithm()
Cipher объекта. Это то же имя, которое было указано в одном из getInstance вызовов, создавших этот Cipher объект.
- Возвращает:
- имя алгоритма этого
Cipherобъекта
getBlockSize
public final int getBlockSize()
- Возвращает:
- размер блока (в байтах) или 0, если данный шифр не является шифром с блочной структурой
getOutputSize
public final int getOutputSize(int inputLen)
update или doFinal операции, учитывая длину входных данных inputLen (в байтах). Этот вызов учитывает любые необработанные (буферизованные) данные из предыдущего вызова update, заполнение и метки AEAD.
Фактическая длина вывода следующей update или doFinal операции может быть меньше длины, возвращаемой этим методом.
- Параметры:
-
inputLen- длина входных данных (в байтах) - Возвращает:
- необходимый размер буфера вывода (в байтах)
- Исключение:
-
IllegalStateException- если этотCipherобъект находится в неправильном состоянии (например, ещё не был инициализирован)
getIV
public final byte[] getIV()
Это полезно в случае, когда был создан случайный IV, или в контексте шифрования/дешифрования на основе пароля, где IV выводится из предоставленного пользователем пароля.
- Возвращает:
- вектор инициализации в новом буфере или
null, если этот шифр не использует IV, или если IV ещё не задан.
getParameters
public final AlgorithmParameters getParameters()
Cipher объектом. Возвращаемые параметры могут быть теми же, которые использовались для инициализации этого шифра, или могут содержать дополнительные значения параметров по умолчанию или случайные значения, используемые реализацией базового шифра. Если необходимые параметры не были предоставлены и могут быть сгенерированы шифром, возвращаются сгенерированные параметры. В противном случае, возвращается null.
- Возвращает:
- используемые параметры, или
null
getExemptionMechanism
public final ExemptionMechanism getExemptionMechanism()
Cipher объектом.- Возвращает:
- объект механизма исключения, используемый с этим
Cipherобъектом, илиnull, если этотCipherобъект не использует механизм исключения.
init
public final void init(int opmode, Key key) throws InvalidKeyException
Cipher объект с помощью ключа. Cipher объект инициализируется для одной из четырёх операций: шифрования, дешифрования, упаковки ключа или распаковки ключа, в зависимости от значения opmode.
Если этому шифру требуются параметры алгоритма, которые нельзя получить из предоставленного key, реализация базового шифра должна сгенерировать необходимые параметры самостоятельно (используя параметры по умолчанию или случайные значения, специфичные для поставщика) в случае инициализации для шифрования или упаковки ключа, и вызывать InvalidKeyException в случае инициализации для дешифрования или распаковки ключа. Сгенерированные параметры можно получить с помощью getParameters или getIV (если параметр является IV).
Если этому шифру требуются параметры алгоритма, которые невозможно получить из входных данных, и нет разумных значений параметров по умолчанию, специфичных для поставщика, инициализация обязательно завершится ошибкой.
Если этому шифру (включая схему обратной связи или схему заполнения) необходимы случайные байты (например, для генерации параметров), они будут получены из реализации SecureRandom поставщика с наивысшим приоритетом, установленного как источник случайности. (Если ни один из установленных поставщиков не предоставляет реализацию SecureRandom, будет использован системный источник случайности.)
Обратите внимание, что при инициализации объекта Cipher, он теряет все ранее полученное состояние. Иными словами, инициализация объекта Cipher эквивалентна созданию нового экземпляра этого объекта Cipher и его инициализации.
- Параметры:
-
opmode- режим работы этогоCipherобъекта (это одно из следующих:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
key- ключ - Исключение:
-
InvalidKeyException- если предоставленный ключ не подходит для инициализации данного шифра, или требует параметры алгоритма, которые нельзя определить из данного ключа, или если размер ключа превышает максимально допустимый размер (определяется из файлов политики юрисдикции) -
UnsupportedOperationException- еслиopmodeявляетсяWRAP_MODEилиUNWRAP_MODE, но режим не реализован базовымCipherSpi -
InvalidParameterException- еслиopmodeне является одним из распознанных значений
init
public final void init(int opmode, Key key, SecureRandom random) throws InvalidKeyException
Cipher объект с помощью ключа и источника случайности. Cipher объект инициализируется для одной из четырёх операций: шифрования, дешифрования, упаковки ключа или распаковки ключа, в зависимости от значения opmode.
Если этому шифру требуются параметры алгоритма, которые невозможно получить из предоставленного key, реализация базового шифра должна сгенерировать необходимые параметры самостоятельно (используя параметры по умолчанию или случайные значения, специфичные для поставщика) в случае инициализации для шифрования или упаковки ключа, и вызывать InvalidKeyException в случае инициализации для дешифрования или распаковки ключа. Сгенерированные параметры можно получить с помощью getParameters или getIV (если параметр является IV).
Если этому шифру требуются параметры алгоритма, которые невозможно получить из входных данных, и нет разумных значений параметров по умолчанию, специфичных для поставщика, инициализация обязательно завершится ошибкой.
Если этому шифру (включая схему обратной связи или схему заполнения) необходимы случайные байты (например, для генерации параметров), они будут получены из random.
Обратите внимание, что при инициализации объекта Cipher, он теряет все ранее полученное состояние. Иными словами, инициализация объекта Cipher эквивалентна созданию нового экземпляра этого объекта Cipher и его инициализации.
- Параметры:
-
opmode- режим работы этогоCipherобъекта (это одно из следующих:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
key- ключ шифрования -
random- источник случайности - Исключение:
-
InvalidKeyException- если предоставленный ключ не подходит для инициализации данного шифра, или требует параметры алгоритма, которые нельзя определить из данного ключа, или если размер ключа превышает максимально допустимый размер (определяется из файлов политики юрисдикции) -
UnsupportedOperationException- еслиopmodeявляетсяWRAP_MODEилиUNWRAP_MODE, но режим не реализован базовымCipherSpi -
InvalidParameterException- еслиopmodeне является одним из распознанных значений
init
public final void init(int opmode, Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException
Cipher ключом и набором параметров алгоритма.
Объект Cipher инициализируется для одной из следующих четырёх операций: шифрования, дешифрования, обертывания ключа или распаковки ключа, в зависимости от значения opmode.
Если для этого шифра требуются параметры алгоритма, и params равно null, реализация базового шифра должна генерировать необходимые параметры самостоятельно (используя параметры по умолчанию или случайные значения, специфичные для поставщика), если она инициализируется для шифрования или обертывания ключа, и должна вызывать исключение InvalidAlgorithmParameterException, если она инициализируется для дешифрования или распаковки ключа. Сгенерированные параметры можно получить, используя getParameters или getIV (если параметром является IV).
Если для этого шифра требуются параметры алгоритма, которые нельзя получить из входных параметров, и нет разумных параметров по умолчанию, специфичных для поставщика, инициализация неизбежно завершится ошибкой.
Если для этого шифра (включая его схему обратной связи или заполнения) требуются случайные байты (например, для генерации параметров), они будут получены из реализации SecureRandom поставщика с наивысшим приоритетом как источник случайности. (Если ни один из установленных поставщиков не предоставляет реализацию SecureRandom, будет использован системный источник случайности.)
Обратите внимание, что при инициализации объекта Cipher, он теряет все ранее полученные состояния. Другими словами, инициализация объекта Cipher эквивалентна созданию нового экземпляра этого объекта Cipher и его инициализации.
- Parameters:
-
opmode- режим работы этого объектаCipher(он может принимать одно из следующих значений:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
key- ключ шифрования -
params- параметры алгоритма - Throws:
-
InvalidKeyException- если заданный ключ не подходит для инициализации этого шифра или его размер ключа превышает максимальный разрешённый размер (определяется из файлов политики юрисдикции) -
InvalidAlgorithmParameterException- если заданные параметры алгоритма не подходят для этого шифра, или этот шифр требует параметров алгоритма, иparamsравноnull, или заданные параметры алгоритма подразумевают криптографическую силу, превышающую установленные юридические ограничения (определяется из файлов политики юрисдикции) -
UnsupportedOperationException- еслиopmodeравноWRAP_MODEилиUNWRAP_MODE, но режим не реализован базовымCipherSpi -
InvalidParameterException- еслиopmodeне является одним из допустимых значений
init
public final void init(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
Cipher ключом, набором параметров алгоритма и источником случайности.
Объект Cipher инициализируется для одной из следующих четырёх операций: шифрования, дешифрования, обертывания ключа или распаковки ключа, в зависимости от значения opmode.
Если для этого шифра требуются параметры алгоритма, и params равно null, реализация базового шифра должна генерировать необходимые параметры самостоятельно (используя параметры по умолчанию или случайные значения, специфичные для поставщика), если она инициализируется для шифрования или обертывания ключа, и должна вызывать исключение InvalidAlgorithmParameterException, если она инициализируется для дешифрования или распаковки ключа. Сгенерированные параметры можно получить, используя getParameters или getIV (если параметром является IV).
Если для этого шифра требуются параметры алгоритма, которые нельзя получить из входных параметров, и нет разумных параметров по умолчанию, специфичных для поставщика, инициализация неизбежно завершится ошибкой.
Если для этого шифра (включая его схему обратной связи или заполнения) требуются случайные байты (например, для генерации параметров), они будут получены из random.
Обратите внимание, что при инициализации объекта Cipher, он теряет все ранее полученные состояния. Другими словами, инициализация объекта Cipher эквивалентна созданию нового экземпляра этого объекта Cipher и его инициализации.
init
public final void init(int opmode, Key key, AlgorithmParameters params) throws InvalidKeyException, InvalidAlgorithmParameterException
Cipher ключом и набором параметров алгоритма.
Объект Cipher инициализируется для одной из следующих четырёх операций: шифрования, дешифрования, обертывания ключа или распаковки ключа, в зависимости от значения opmode.
Если для этого шифра требуются параметры алгоритма, и params равно null, реализация базового шифра должна генерировать необходимые параметры самостоятельно (используя параметры по умолчанию или случайные значения, специфичные для поставщика), если она инициализируется для шифрования или обертывания ключа, и должна вызывать исключение InvalidAlgorithmParameterException, если она инициализируется для дешифрования или распаковки ключа. Сгенерированные параметры можно получить, используя getParameters или getIV (если параметром является IV).
Если для этого шифра требуются параметры алгоритма, которые нельзя получить из входных параметров, и нет разумных параметров по умолчанию, специфичных для поставщика, инициализация неизбежно завершится ошибкой.
Если для этого шифра (включая его схему обратной связи или заполнения) требуются случайные байты (например, для генерации параметров), они будут получены из реализации SecureRandom поставщика с наивысшим приоритетом как источник случайности. (Если ни один из установленных поставщиков не предоставляет реализацию SecureRandom, будет использован системный источник случайности.)
Обратите внимание, что при инициализации объекта Cipher, он теряет все ранее полученные состояния. Другими словами, инициализация объекта Cipher эквивалентна созданию нового экземпляра этого объекта Cipher и его инициализации.
init
public final void init(int opmode, Key key, AlgorithmParameters params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
Cipher объект с ключом, набором параметров алгоритма и источником случайности. Объект Cipher инициализируется для одной из четырёх операций: шифрования, дешифрования, обертывания ключа или распаковки ключа, в зависимости от значения opmode.
Если этому шифру требуются какие-либо параметры алгоритма, и params равно null, то реализация базового шифра должна сама сгенерировать необходимые параметры (используя предопределённые или случайные значения, специфичные для поставщика), если она инициализируется для шифрования или обертывания ключа, и выбросить исключение InvalidAlgorithmParameterException, если она инициализируется для дешифрования или распаковки ключа. Сгенерированные параметры можно получить, используя getParameters или getIV (если параметром является IV).
Если этому шифру требуются параметры алгоритма, которые нельзя получить из входных параметров, и нет разумных предопределённых значений, специфичных для поставщика, инициализация обязательно завершится ошибкой.
Если этому шифру (включая схему обратной связи или заполнения) требуются какие-либо случайные байты (например, для генерации параметров), они будут получены из random.
Обратите внимание, что при инициализации объекта Cipher, он теряет все ранее полученные состояния. Другими словами, инициализация объекта Cipher эквивалентна созданию нового экземпляра этого объекта Cipher и его инициализации.
- Parameters:
-
opmode- режим работы этого объектаCipher(это одно из следующих значений:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE). -
key- ключ шифрования. -
params- параметры алгоритма. -
random- источник случайности. - Throws:
-
InvalidKeyException- если заданный ключ не подходит для инициализации данного шифра или его размер превышает максимальный разрешённый размер ключа (как определено в файлах политики юрисдикции). -
InvalidAlgorithmParameterException- если заданные параметры алгоритма не подходят для данного шифра, или этот шифр требует параметров алгоритма, иparamsравноnull, или заданные параметры алгоритма подразумевают криптографическую силу, превышающую законные пределы (как определено в файлах политики юрисдикции). -
UnsupportedOperationException- еслиopmodeравноWRAP_MODEилиUNWRAP_MODE, но режим не реализован в базовомCipherSpi. -
InvalidParameterException- еслиopmodeне является одним из распознанных значений.
init
public final void init(int opmode, Certificate certificate) throws InvalidKeyException
Cipher объект с открытым ключом из заданного сертификата. Объект Cipher инициализируется для одной из четырёх операций: шифрования, дешифрования, обертывания ключа или распаковки ключа, в зависимости от значения opmode.
Если сертификат типа X.509 и имеет поле расширения key usage, помеченное как критическое, и значение поля расширения key usage подразумевает, что открытый ключ в сертификате и соответствующий закрытый ключ не должны использоваться для операции, представленной значением opmode, выбрасывается исключение InvalidKeyException.
Если этому шифру требуются какие-либо параметры алгоритма, которые нельзя получить из открытого ключа в заданном сертификате, то реализация базового шифра должна сама сгенерировать необходимые параметры (используя предопределённые или случайные значения, специфичные для поставщика), если она инициализируется для шифрования или обертывания ключа, и выбросить исключение InvalidKeyException, если она инициализируется для дешифрования или распаковки ключа. Сгенерированные параметры можно получить, используя getParameters или getIV (если параметром является IV).
Если этому шифру требуются параметры алгоритма, которые нельзя получить из входных параметров, и нет разумных предопределённых значений, специфичных для поставщика, инициализация обязательно завершится ошибкой.
Если этому шифру (включая схему обратной связи или заполнения) требуются какие-либо случайные байты (например, для генерации параметров), они будут получены с помощью реализации SecureRandom наиболее приоритетного установленного поставщика в качестве источника случайности. (Если ни один из установленных поставщиков не предоставляет реализацию SecureRandom, будет использован системный источник случайности.)
Обратите внимание, что при инициализации объекта Cipher, он теряет все ранее полученные состояния. Другими словами, инициализация объекта Cipher эквивалентна созданию нового экземпляра этого объекта Cipher и его инициализации.
- Parameters:
-
opmode- режим работы этого объектаCipher(это одно из следующих значений:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE). -
certificate- сертификат. - Throws:
-
InvalidKeyException- если открытый ключ в заданном сертификате не подходит для инициализации данного шифра, или этому шифру требуются параметры алгоритма, которые нельзя определить из открытого ключа в заданном сертификате, или размер ключа открытого ключа в заданном сертификате превышает максимальный разрешённый размер ключа (как определено в файлах политики юрисдикции). -
UnsupportedOperationException- еслиopmodeравноWRAP_MODEилиUNWRAP_MODE, но режим не реализован в базовомCipherSpi -
InvalidParameterException- еслиopmodeне является одним из распознанных значений.
init
public final void init(int opmode, Certificate certificate, SecureRandom random) throws InvalidKeyException
Cipher объект с открытым ключом из заданного сертификата и источником случайности. Объект Cipher инициализируется для одной из четырёх операций: шифрования, дешифрования, обертывания ключа или распаковки ключа, в зависимости от значения opmode.
Если сертификат типа X.509 и имеет поле расширения key usage, помеченное как критическое, и значение поля расширения key usage подразумевает, что открытый ключ в сертификате и соответствующий закрытый ключ не должны использоваться для операции, представленной значением opmode, выбрасывается исключение InvalidKeyException.
Если этому шифру требуются какие-либо параметры алгоритма, которые нельзя получить из открытого ключа в заданном certificate, то реализация базового шифра должна сама сгенерировать необходимые параметры (используя предопределённые или случайные значения, специфичные для поставщика), если она инициализируется для шифрования или обертывания ключа, и выбросить исключение InvalidKeyException, если она инициализируется для дешифрования или распаковки ключа. Сгенерированные параметры можно получить, используя getParameters или getIV (если параметром является IV).
Если этому шифру требуются параметры алгоритма, которые нельзя получить из входных параметров, и нет разумных предопределённых значений, специфичных для поставщика, инициализация обязательно завершится ошибкой.
Если этому шифру (включая схему обратной связи или заполнения) требуются какие-либо случайные байты (например, для генерации параметров), они будут получены из random.
Обратите внимание, что при инициализации объекта Cipher, он теряет все ранее полученные состояния. Другими словами, инициализация объекта Cipher эквивалентна созданию нового экземпляра этого объекта Cipher и его инициализации.
- Parameters:
-
opmode- режим работы этого объектаCipher(это одно из следующих значений:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE). -
certificate- сертификат. -
random- источник случайности. - Throws:
-
InvalidKeyException- если открытый ключ в заданном сертификате не подходит для инициализации данного шифра, или этому шифру требуются параметры алгоритма, которые нельзя определить из открытого ключа в заданном сертификате, или размер ключа открытого ключа в заданном сертификате превышает максимальный разрешённый размер ключа (как определено в файлах политики юрисдикции). -
UnsupportedOperationException- еслиopmodeравноWRAP_MODEилиUNWRAP_MODE, но режим не реализован в базовомCipherSpi -
InvalidParameterException- еслиopmodeне является одним из распознанных значений.
update
public final byte[] update(byte[] input)
Cipher), обрабатывая ещё один фрагмент данных. Байты в буфере input обрабатываются, и результат хранится в новом буфере.
Если длина input равна нулю, этот метод возвращает null.
- Parameters:
-
input- входной буфер. - Returns:
- новый буфер с результатом или
null, если этот шифр является блочным шифром, а входные данные слишком короткие, чтобы создать новый блок. - Throws:
-
IllegalStateException- если этот объектCipherнаходится в неправильном состоянии (например, не был инициализирован).
update
public final byte[] update(byte[] input, int inputOffset, int inputLen)
Cipher объекта), обрабатывая ещё один фрагмент данных. Обрабатываются первые inputLen байты в буфере input, начиная с позиции inputOffset включительно, и результат сохраняется в новом буфере.
Если inputLen равно нулю, этот метод возвращает null.
- Параметры:
-
input- буфер ввода -
inputOffset- смещение в буфереinput, с которого начинается ввод -
inputLen- длина ввода - Возвращает:
- новый буфер с результатом или
null, если данный шифр — блочный шифр, а входные данные слишком коротки, чтобы сформировать новый блок. - Исключения:
-
IllegalStateException- если объектCipherнаходится в неправильном состоянии (например, не был инициализирован)
update
public final int update(byte[] input, int inputOffset, int inputLen, byte[] output) throws ShortBufferException
Cipher объекта), обрабатывая ещё один фрагмент данных. Обрабатываются первые inputLen байты в буфере input, начиная с позиции inputOffset включительно, и результат сохраняется в буфере output.
Если буфер output слишком мал для хранения результата, будет брошено исключение ShortBufferException. В этом случае повторите вызов с более крупным буфером вывода. Используйте getOutputSize для определения размера буфера вывода.
Если inputLen равно нулю, этот метод возвращает ноль.
Примечание: этот метод должен быть безопасным для копирования, т.е. буферы input и output могут ссылаться на один и тот же массив байтов, и при копировании результата в буфер вывода не перезаписываются необработанные входные данные.
- Параметры:
-
input- буфер ввода -
inputOffset- смещение в буфереinput, с которого начинается ввод -
inputLen- длина ввода -
output- буфер для результата - Возвращает:
- количество байтов, сохранённых в
output - Исключения:
-
IllegalStateException- если объектCipherнаходится в неправильном состоянии (например, не был инициализирован) -
ShortBufferException- если предоставленный буфер вывода слишком мал для хранения результата
update
public final int update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException
Cipher объекта), обрабатывая ещё один фрагмент данных. Обрабатываются первые inputLen байты в буфере input, начиная с позиции inputOffset включительно, и результат сохраняется в буфере output, начиная с позиции outputOffset включительно.
Если буфер output слишком мал для хранения результата, будет брошено исключение ShortBufferException. В этом случае повторите вызов с более крупным буфером вывода. Используйте getOutputSize для определения размера буфера вывода.
Если inputLen равно нулю, этот метод возвращает ноль.
Примечание: этот метод должен быть безопасным для копирования, т.е. буферы input и output могут ссылаться на один и тот же массив байтов, и при копировании результата в буфер вывода не перезаписываются необработанные входные данные.
- Параметры:
-
input- буфер ввода -
inputOffset- смещение в буфереinput, с которого начинается ввод -
inputLen- длина ввода -
output- буфер для результата -
outputOffset- смещение в буфереoutput, в котором хранится результат - Возвращает:
- количество байтов, сохранённых в
output - Исключения:
-
IllegalStateException- если объектCipherнаходится в неправильном состоянии (например, не был инициализирован) -
ShortBufferException- если предоставленный буфер вывода слишком мал для хранения результата
update
public final int update(ByteBuffer input, ByteBuffer output) throws ShortBufferException
Cipher объекта), обрабатывая ещё один фрагмент данных. Обрабатываются все input.remaining() байты, начиная с позиции input.position() в буфере. Результат сохраняется в буфере вывода. По завершении метод вернёт позицию буфера ввода, равную его пределу; его предел не изменится. Позиция буфера вывода сместится на n, где n — значение, возвращаемое этим методом; его предел не изменится.
Если output.remaining() байтов недостаточно для хранения результата, будет брошено исключение ShortBufferException. В этом случае повторите вызов с более крупным буфером вывода. Используйте getOutputSize для определения размера буфера вывода.
Примечание: этот метод должен быть безопасным для копирования, т.е. буферы input и output могут ссылаться на один и тот же блок памяти, и при копировании результата в буфер вывода не перезаписываются необработанные входные данные.
- Параметры:
-
input- входной ByteBuffer -
output- выходной ByteBuffer - Возвращает:
- количество байтов, сохранённых в
output - Исключения:
-
IllegalStateException- если объектCipherнаходится в неправильном состоянии (например, не был инициализирован) -
IllegalArgumentException- если входной и выходной буферы — один и тот же объект -
ReadOnlyBufferException- если буфер вывода только для чтения -
ShortBufferException- если в буфере вывода недостаточно места - См. также:
- 1.5
doFinal
public final byte[] doFinal() throws IllegalBlockSizeException, BadPaddingException
Cipher объекта. Данные, которые могли быть буферизованы во время предыдущей операции update, обрабатываются с применением заполнения (если это запрошено). Если используется режим AEAD, например GCM/CCM, в случае шифрования добавляется тег аутентификации, а в случае дешифрования проверяется тег аутентификации. Результат сохраняется в новом буфере.
По завершении метод сбрасывает этот объект Cipher в состояние, в котором он находился при предыдущей инициализации с помощью вызова init. То есть объект сбрасывается и готов к шифрованию или дешифрованию (в зависимости от режима работы, указанного при вызове init ) дополнительных данных.
Примечание: если возникает какое-либо исключение, этот объект Cipher может потребовать сброса, прежде чем его можно будет использовать снова.
- Возвращает:
- новый буфер с результатом
- Исключения:
-
IllegalStateException- если объектCipherнаходится в неправильном состоянии (например, не был инициализирован) -
IllegalBlockSizeException- если данный шифр — блочный шифр, заполнение не было запрошено (только в режиме шифрования), а общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные. -
BadPaddingException- если этот объектCipherнаходится в режиме дешифрования, и заполнение запрошено, но расшифрованные данные не ограничены соответствующими байтами заполнения -
AEADBadTagException- если объектCipherвыполняет дешифрование в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением
doFinal
public final int doFinal(byte[] output, int outputOffset) throws IllegalBlockSizeException, ShortBufferException, BadPaddingException
Cipher объекта. Данные, которые могли быть буферизованы во время предыдущей операции update, обрабатываются с применением заполнения (если это запрошено). Если используется режим AEAD, например GCM/CCM, в случае шифрования добавляется тег аутентификации, а в случае дешифрования проверяется тег аутентификации. Результат сохраняется в буфере output, начиная с позиции outputOffset включительно.
Если буфер output слишком мал для хранения результата, будет брошено исключение ShortBufferException. В этом случае повторите вызов с более крупным буфером вывода. Используйте getOutputSize для определения размера буфера вывода.
По завершении метод сбрасывает этот объект Cipher в состояние, в котором он находился при предыдущей инициализации с помощью вызова init. То есть объект сбрасывается и готов к шифрованию или дешифрованию (в зависимости от режима работы, указанного при вызове init ) дополнительных данных.
Примечание: если возникает какое-либо исключение, этот объект Cipher может потребовать сброса, прежде чем его можно будет использовать снова.
- Параметры:
-
output- буфер для результата -
outputOffset- смещение в буфереoutput, в котором хранится результат - Возвращает:
- количество байтов, сохранённых в
output - Исключения:
-
IllegalStateException- если объектCipherнаходится в неправильном состоянии (например, не был инициализирован) -
IllegalBlockSizeException- если данный шифр — блочный шифр, заполнение не было запрошено (только в режиме шифрования), а общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные. -
ShortBufferException- если предоставленный буфер вывода слишком мал для хранения результата -
BadPaddingException- если объектCipherнаходится в режиме дешифрования, и заполнение запрошено, но расшифрованные данные не ограничены соответствующими байтами заполнения -
AEADBadTagException- если объектCipherвыполняет дешифрование в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением
doFinal
public final byte[] doFinal(byte[] input) throws IllegalBlockSizeException, BadPaddingException
Cipher объект. Байты в буфере input, а также любые входные байты, которые могли быть буферизованы во время предыдущей операции update, обрабатываются с применением заполнения (если оно запрошено). Если используется режим AEAD, такой как GCM/CCM, тег аутентификации добавляется в случае шифрования или проверяется в случае расшифрования. Результат сохраняется в новом буфере.
После завершения этот метод сбрасывает этот Cipher объект в состояние, в котором он находился до предыдущей инициализации с помощью вызова init. То есть объект сбрасывается и готов к шифрованию или расшифровке (в зависимости от режима работы, указанного при вызове init) дополнительных данных.
Примечание: если возникает любое исключение, этот Cipher объект может потребовать сброса перед повторным использованием.
- Parameters:
-
input- буфер входных данных - Returns:
- новый буфер с результатом
- Throws:
-
IllegalStateException- если этотCipherобъект находится в неправильном состоянии (например, не был инициализирован) -
IllegalBlockSizeException- если этот шифр — блочный шифр, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если данный алгоритм шифрования не может обработать предоставленные входные данные. -
BadPaddingException- если этотCipherобъект работает в режиме расшифрования, и (рас)заполнение было запрошено, но расшифрованные данные не ограничены соответствующими байтами заполнения -
AEADBadTagException- если этотCipherобъект расшифровывает данные в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением
doFinal
public final byte[] doFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException, BadPaddingException
Cipher объект. Первые inputLen байты в буфере input, начиная со смещения inputOffset включительно, а также любые входные байты, которые могли быть буферизованы во время предыдущей операции update, обрабатываются с применением заполнения (если оно запрошено). Если используется режим AEAD, такой как GCM/CCM, тег аутентификации добавляется в случае шифрования или проверяется в случае расшифрования. Результат сохраняется в новом буфере.
После завершения этот метод сбрасывает этот Cipher объект в состояние, в котором он находился до предыдущей инициализации с помощью вызова init. То есть объект сбрасывается и готов к шифрованию или расшифровке (в зависимости от режима работы, указанного при вызове init) дополнительных данных.
Примечание: если возникает любое исключение, этот Cipher объект может потребовать сброса перед повторным использованием.
- Parameters:
-
input- буфер входных данных -
inputOffset- смещение вinput, где начинается входной данные -
inputLen- длина входных данных - Returns:
- новый буфер с результатом
- Throws:
-
IllegalStateException- если этотCipherобъект находится в неправильном состоянии (например, не был инициализирован) -
IllegalBlockSizeException- если этот шифр — блочный шифр, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если данный алгоритм шифрования не может обработать предоставленные входные данные. -
BadPaddingException- если этотCipherобъект работает в режиме расшифрования, и (рас)заполнение было запрошено, но расшифрованные данные не ограничены соответствующими байтами заполнения -
AEADBadTagException- если этотCipherобъект расшифровывает данные в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением
doFinal
public final int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
Cipher объект. Первые inputLen байты в буфере input, начиная со смещения inputOffset включительно, а также любые входные байты, которые могли быть буферизованы во время предыдущей операции update, обрабатываются с применением заполнения (если оно запрошено). Если используется режим AEAD, такой как GCM/CCM, тег аутентификации добавляется в случае шифрования или проверяется в случае расшифрования. Результат сохраняется в буфере output.
Если буфер output слишком мал для хранения результата, выбрасывается ShortBufferException. В этом случае повторите этот вызов с более крупным буфером вывода. Используйте getOutputSize, чтобы определить, каким должен быть размер буфера вывода.
После завершения этот метод сбрасывает этот Cipher объект в состояние, в котором он находился до предыдущей инициализации с помощью вызова init. То есть объект сбрасывается и готов к шифрованию или расшифровке (в зависимости от режима работы, указанного при вызове init) дополнительных данных.
Примечание: если возникает любое исключение, этот Cipher объект может потребовать сброса перед повторным использованием.
Примечание: этот метод должен быть безопасным при копировании, что означает, что буферы input и output могут ссылаться на один и тот же массив байтов и при копировании результата в буфер вывода не происходит перезаписи непроработанных входных данных.
- Parameters:
-
input- буфер входных данных -
inputOffset- смещение вinputначала входных данных -
inputLen- длина входных данных -
output- буфер для результата - Returns:
- количество байтов, сохранённых в
output - Throws:
-
IllegalStateException- если этотCipherобъект находится в неправильном состоянии (например, не был инициализирован) -
IllegalBlockSizeException- если этот шифр — блочный шифр, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если данный алгоритм шифрования не может обработать предоставленные входные данные. -
ShortBufferException- если заданный буфер вывода слишком мал для хранения результата -
BadPaddingException- если этотCipherобъект работает в режиме расшифрования, и (рас)заполнение было запрошено, но расшифрованные данные не ограничены соответствующими байтами заполнения -
AEADBadTagException- если этотCipherобъект расшифровывает данные в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением
doFinal
public final int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
Cipher объект. Первые inputLen байты в буфере input, начиная со смещения inputOffset включительно, а также любые входные байты, которые могли быть буферизованы во время предыдущей операции update, обрабатываются с применением заполнения (если оно запрошено). Если используется режим AEAD, такой как GCM/CCM, тег аутентификации добавляется в случае шифрования или проверяется в случае расшифрования. Результат сохраняется в буфере output, начиная со смещения outputOffset включительно.
Если буфер output слишком мал для хранения результата, выбрасывается ShortBufferException. В этом случае повторите этот вызов с более крупным буфером вывода. Используйте getOutputSize, чтобы определить, каким должен быть размер буфера вывода.
После завершения этот метод сбрасывает этот Cipher объект в состояние, в котором он находился до предыдущей инициализации с помощью вызова init. То есть объект сбрасывается и готов к шифрованию или расшифровке (в зависимости от режима работы, указанного при вызове init) дополнительных данных.
Примечание: если возникает любое исключение, этот Cipher объект может потребовать сброса перед повторным использованием.
Примечание: этот метод должен быть безопасным при копировании, что означает, что буферы input и output могут ссылаться на один и тот же массив байтов и при копировании результата в буфер вывода не происходит перезаписи непроработанных входных данных.
- Parameters:
-
input- буфер входных данных -
inputOffset- смещение вinputначала входных данных -
inputLen- длина входных данных -
output- буфер для результата -
outputOffset- смещение вoutputначала результата - Returns:
- количество байтов, сохранённых в
output - Throws:
-
IllegalStateException- если этотCipherобъект находится в неправильном состоянии (например, не был инициализирован) -
IllegalBlockSizeException- если этот шифр — блочный шифр, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если данный алгоритм шифрования не может обработать предоставленные входные данные. -
ShortBufferException- если заданный буфер вывода слишком мал для хранения результата -
BadPaddingException- если этотCipherобъект работает в режиме расшифрования, и (рас)заполнение было запрошено, но расшифрованные данные не ограничены соответствующими байтами заполнения -
AEADBadTagException- если этотCipherобъект расшифровывает данные в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением
doFinal
public final int doFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
Cipher объект. Обрабатываются все input.remaining() байты, начиная с input.position(). Если используется режим AEAD, такой как GCM/CCM, тег аутентификации добавляется в случае шифрования или проверяется в случае расшифрования. Результат сохраняется в выходном буфере. После возвращения позиция входного буфера будет равна его пределу; его предел не изменится. Позиция выходного буфера продвинется на n, где n — значение, возвращаемое этим методом; предел выходного буфера не изменится.
Если output.remaining() байтов недостаточно для хранения результата, выбрасывается ShortBufferException. В этом случае повторите этот вызов с более крупным выходным буфером. Используйте getOutputSize, чтобы определить, каким должен быть размер выходного буфера.
После завершения этот метод сбрасывает этот Cipher объект в состояние, в котором он находился при предыдущей инициализации с помощью вызова init. То есть объект сбрасывается и готов к шифрованию или расшифровке (в зависимости от режима работы, указанного в вызове init ) дополнительных данных.
Примечание: если возникает какое-либо исключение, этот Cipher объект может потребоваться сбросить, прежде чем его можно будет использовать снова.
Примечание: этот метод должен быть безопасным при копировании, что означает, что буферы input и output могут ссылаться на один и тот же массив байтов, и при копировании результата в выходной буфер не перезаписываются непрочитанные входные данные.
- Parameters:
-
input- входной ByteBuffer -
output- выходной ByteBuffer - Returns:
- количество байтов, сохранённых в
output - Throws:
-
IllegalStateException- если этотCipherобъект находится в неправильном состоянии (например, не был инициализирован) -
IllegalArgumentException- если входной и выходной буферы — один и тот же объект -
ReadOnlyBufferException- если выходной буфер только для чтения -
IllegalBlockSizeException- если этот шифр является блочным шифром, не был запрошен метод заполнения (только в режиме шифрования), а общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные. -
ShortBufferException- если в выходном буфере недостаточно места -
BadPaddingException- если этотCipherобъект находится в режиме расшифрования, а (де)заполнение запрошено, но расшифрованные данные не ограничены соответствующими байтами заполнения -
AEADBadTagException- если этотCipherобъект расшифровывает в режиме AEAD (таком как GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением - Since:
- 1.5
wrap
public final byte[] wrap(Key key) throws IllegalBlockSizeException, InvalidKeyException
- Parameters:
-
key- ключ для заворачивания - Returns:
- завернутый ключ
- Throws:
-
IllegalStateException- если этотCipherобъект находится в неправильном состоянии (например, не был инициализирован) -
IllegalBlockSizeException- если этот шифр является блочным шифром, не было запрошено заполнение, а длина кодирования ключа для заворачивания не кратна размеру блока -
InvalidKeyException- если невозможно или небезопасно завернуть ключ с помощью этого шифра (например, защищённый аппаратный ключ передаётся программному шифру) -
UnsupportedOperationException- если соответствующий метод вCipherSpiне поддерживается
unwrap
public final Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException
- Parameters:
-
wrappedKey- ключ для расскручивания -
wrappedKeyAlgorithm- алгоритм, связанный с завернутым ключом -
wrappedKeyType- тип завернутого ключа. Он должен быть одним изSECRET_KEY,PRIVATE_KEY, илиPUBLIC_KEY - Returns:
- расскрученный ключ
- Throws:
-
IllegalStateException- если этотCipherобъект находится в неправильном состоянии (например, не был инициализирован) -
NoSuchAlgorithmException- если ни один из установленных поставщиков не может создать ключи типаwrappedKeyTypeдляwrappedKeyAlgorithm -
InvalidKeyException- еслиwrappedKeyне представляет собой завернутый ключ типаwrappedKeyTypeдляwrappedKeyAlgorithm -
UnsupportedOperationException- если соответствующий метод вCipherSpiне поддерживается
getMaxAllowedKeyLength
public static final int getMaxAllowedKeyLength(String transformation) throws NoSuchAlgorithmException
Integer.MAX_VALUE. Дополнительную информацию о стандартных размерах ключей и файлах политики юрисдикции JCE можно найти в разделе Криптографические значения и ограничения в документации поставщиков JDK.- Parameters:
-
transformation- трансформация шифра - Returns:
- максимальная длина ключа в битах или
Integer.MAX_VALUE - Throws:
-
NullPointerException- еслиtransformationявляетсяnull -
NoSuchAlgorithmException- еслиtransformationне является допустимой трансформацией, т.е. в форме «алгоритм» или «алгоритм/режим/заполнение» - Since:
- 1.5
getMaxAllowedParameterSpec
public static final AlgorithmParameterSpec getMaxAllowedParameterSpec(String transformation) throws NoSuchAlgorithmException
Cipher в соответствии с файлом политики юрисдикции. Если установлены файлы политики юрисдикции JCE с неограниченной силой или в файле политики нет максимального ограничения параметров для указанной трансформации, будет возвращено null. - Parameters:
-
transformation- трансформация шифра - Returns:
- объект {code AlgorithmParameterSpec}, содержащий максимальное значение или
null - Throws:
-
NullPointerException- еслиtransformationявляетсяnull -
NoSuchAlgorithmException- еслиtransformationне является допустимой трансформацией, т.е. в форме «алгоритм» или «алгоритм/режим/заполнение» - Since:
- 1.5
updateAAD
public final void updateAAD(byte[] src)
Вызовы этого метода обеспечивают AAD объекту Cipher при работе в режимах, таких как AEAD (GCM/CCM). Если этот объект Cipher работает в режиме GCM или CCM, все AAD должны быть предоставлены перед началом операций с шифротекстом (через методы update и doFinal).
- Parameters:
-
src- буфер, содержащий дополнительные данные аутентификации - Throws:
-
IllegalArgumentException- если массив байтовsrcявляетсяnull -
IllegalStateException- если этотCipherобъект находится в неправильном состоянии (например, не был инициализирован), не принимает AAD или если работает в режиме GCM или CCM, и один из методовupdateбыл уже вызван для активной операции шифрования/расшифрования -
UnsupportedOperationException- если соответствующий метод вCipherSpiне был переопределён реализацией - Since:
- 1.7
updateAAD
public final void updateAAD(byte[] src, int offset, int len)
Вызовы этого метода обеспечивают AAD объекту Cipher при работе в режимах, таких как AEAD (GCM/CCM). Если этот объект Cipher работает в режиме GCM или CCM, все AAD должны быть предоставлены перед началом операций с шифротекстом (через методы update и doFinal).
- Parameters:
-
src- буфер, содержащий AAD -
offset- смещение вsrc, где начинается входной AAD -
len- количество байтов AAD - Throws:
-
IllegalArgumentException- если массив байтовsrcявляетсяnull, илиoffsetилиlengthменьше 0, или суммаoffsetиlenбольше длины массива байтовsrc -
IllegalStateException- если этотCipherобъект находится в неправильном состоянии (например, не был инициализирован), не принимает AAD или если работает в режиме GCM или CCM, и один из методовupdateбыл уже вызван для активной операции шифрования/расшифрования -
UnsupportedOperationException- если соответствующий метод вCipherSpiне был переопределён реализацией - Since:
- 1.7
updateAAD
public final void updateAAD(ByteBuffer src)
Вызовы этого метода предоставляют AAD объекту Cipher при работе в режимах, таких как AEAD (GCM/CCM). Если этот объект Cipher работает в режиме GCM или CCM, все AAD должны быть предоставлены до начала операций с шифрованным текстом (через методы update и doFinal).
Все байты src.remaining(), начиная с src.position(), обрабатываются. По возвращении позиция буфера ввода будет равна его пределу; его предел не изменится.
- Параметры:
-
src- буфер, содержащий AAD - Исключения:
-
IllegalArgumentException- еслиsrc ByteBufferявляетсяnull -
IllegalStateException- если этот объектCipherнаходится в неправильном состоянии (например, не был инициализирован), не принимает AAD или если работает в режиме GCM или CCM, и один из методовupdateуже был вызван для активной операции шифрования/дешифрования -
UnsupportedOperationException- если соответствующий метод вCipherSpiне был переопределен реализацией - С:
- 1.7
toString
public String toString()
Cipher. - Переопределяет:
-
toStringв классеObject - Примечание по реализации:
- Эта реализация возвращает строку, содержащую преобразование, режим и поставщик этого объекта
Cipher. Точный формат строки не определен и может быть изменен. - Возвращает:
- строку, описывающую этот объект
Cipher
© 1993, 2023, 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/21/docs/api/java.base/javax/crypto/Cipher.html