Класс 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.) Таким образом, с помощью 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, 256) ChaCha20-Poly1305-
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 дополнительно использует свойство
jdk.security.provider.preferredSecurity, чтобы определить предпочтительный порядок поставщиков для указанного алгоритма. Он может отличаться от порядка поставщиков, возвращаемых методомSecurity.getProviders(). Сведения о значениях преобразований по умолчанию, используемых поставщиками JDK, см. также в разделе «Преобразования Cipher» документа Поставщики JDK. - Параметры:
-
transformation— имя преобразования, например AES/CBC/PKCS5Padding. Сведения о стандартных именах преобразований см. в разделе Cipher спецификации стандартных имен алгоритмов Java Security. - Возвращает:
- объект
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, см. в разделе «Преобразования Cipher» документа Поставщики JDK.
- Параметры:
-
transformation— имя преобразования, например AES/CBC/PKCS5Padding. Сведения о стандартных именах преобразований см. в разделе Cipher спецификации стандартных имен алгоритмов Java Security. -
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, см. в разделе «Преобразования Cipher» документа Поставщики JDK.
- Параметры:
-
transformation— имя преобразования, например AES/CBC/PKCS5Padding. Сведения о стандартных именах преобразований см. в разделе Cipher спецификации стандартных имен алгоритмов Java Security. -
provider— поставщик - Возвращает:
- объект
Cipher, реализующий запрошенное преобразование - Исключения:
-
IllegalArgumentException— еслиproviderравенnull -
NoSuchAlgorithmException— еслиtransformationравенnull, пуст, имеет недопустимый формат или указанный объектproviderне предоставляет реализациюCipherSpiдля заданного алгоритма -
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 и его инициализации.
- Параметры:
-
opmode— режим работы этого объектаCipher(одно из следующих значений:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
key— ключ шифрования -
params— параметры алгоритма - Исключения:
-
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 и его инициализации.
- Параметры:
-
opmode— режим работы этого объектаCipher(одно из следующих значений:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
key— ключ шифрования -
params— параметры алгоритма -
random— источник случайных данных - Исключения:
-
InvalidKeyException— если заданный ключ не подходит для инициализации этого шифра или его размер превышает максимально допустимый (согласно настроенным файлам политик юрисдикции) -
InvalidAlgorithmParameterException— если заданные параметры алгоритма не подходят для этого шифра, если этому шифру требуются параметры алгоритма, аparamsравенnull, либо если заданные параметры алгоритма подразумевают криптографическую стойкость, превышающую установленные законом ограничения (согласно настроенным файлам политик юрисдикции) -
UnsupportedOperationException— еслиopmodeравенWRAP_MODEилиUNWRAP_MODE, но базовая реализацияCipherSpiне реализует этот режим -
InvalidParameterException— еслиopmodeне входит в число распознаваемых значений
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 и его инициализации.
- Параметры:
-
opmode— режим операции этого объектаCipher(одно из следующих значений:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
key— ключ шифрования -
params— параметры алгоритма - Исключения:
-
InvalidKeyException— если указанный ключ не подходит для инициализации этого шифра или его размер превышает максимально допустимый (согласно настроенным файлам политики юрисдикции). -
InvalidAlgorithmParameterException— если указанные параметры алгоритма не подходят для этого шифра, этому шифру требуются параметры алгоритма, аparamsимеет значениеnull, либо указанные параметры алгоритма подразумевают криптографическую стойкость, превышающую допустимые законом пределы (согласно настроенным файлам политики юрисдикции) -
UnsupportedOperationException— еслиopmodeимеет значениеWRAP_MODEилиUNWRAP_MODE, но базовая реализацияCipherSpiне поддерживает этот режим -
InvalidParameterException— еслиopmodeне соответствует ни одному из распознаваемых значений
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 и его инициализации.
- Параметры:
-
opmode— режим операции этого объектаCipher(одно из следующих значений:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
key— ключ шифрования -
params— параметры алгоритма -
random— источник случайных данных - Исключения:
-
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 и его инициализации.
- Параметры:
-
opmode— режим операции этого объектаCipher(одно из следующих значений:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
certificate— сертификат - Исключения:
-
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 и его инициализации.
- Параметры:
-
opmode— режим операции этого объектаCipher(одно из следующих значений:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
certificate— сертификат -
random— источник случайных данных - Исключения:
-
InvalidKeyException— если открытый ключ в указанном сертификате не подходит для инициализации этого шифра, этому шифру требуются параметры алгоритма, которые невозможно определить по открытому ключу в указанном сертификате, либо размер открытого ключа в указанном сертификате превышает максимально допустимый (согласно настроенным файлам политики юрисдикции) -
UnsupportedOperationException— еслиopmodeимеет значениеWRAP_MODEилиUNWRAP_MODE, но базовая реализацияCipherSpiне поддерживает этот режим -
InvalidParameterException— еслиopmodeне соответствует ни одному из распознаваемых значений
update
public final byte[] update(byte[] input)
Cipher), обрабатывая следующую часть данных. Байты в буфере input обрабатываются, а результат сохраняется в новом буфере.
Если длина input равна нулю, этот метод возвращает null.
- Параметры:
-
input— входной буфер - Возвращает:
- новый буфер с результатом или
null, если этот шифр является блочным и входных данных недостаточно для создания нового блока - Исключения:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE)
update
public final byte[] update(byte[] input, int inputOffset, int inputLen)
Cipher), обрабатывая следующую часть данных. Обрабатываются первые inputLen байт буфера input, начиная с позиции inputOffset включительно, а результат сохраняется в новом буфере.
Если inputLen равно нулю, этот метод возвращает null.
- Параметры:
-
input— входной буфер -
inputOffset— смещение вinput, с которого начинаются входные данные -
inputLen— длина входных данных - Возвращает:
- новый буфер с результатом или
null, если этот шифр является блочным и входных данных недостаточно для создания нового блока. - Исключения:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE)
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находится в неверном состоянии (например, не инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE) -
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находится в неверном состоянии (например, не инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE) -
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— выходной ByteByffer - Возвращает:
- количество байтов, сохранённых в
output - Исключения:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE) -
IllegalArgumentException— если входной и выходной буферы являются одним и тем же объектом -
ReadOnlyBufferException— если выходной буфер доступен только для чтения -
ShortBufferException— если в выходном буфере недостаточно места - Начиная с версии:
- 1.5
doFinal
public final byte[] doFinal() throws IllegalBlockSizeException, BadPaddingException
Cipher. Обрабатываются входные данные, которые могли быть буферизованы во время предыдущей операции update, и применяется дополнение (если оно запрошено). Если используется режим AEAD, например GCM/CCM, тег аутентификации добавляется при шифровании или проверяется при расшифровании. Результат сохраняется в новом буфере.
По завершении этот метод сбрасывает объект Cipher в состояние, в котором он находился после предыдущей инициализации вызовом init. То есть объект сбрасывается и становится доступным для шифрования или расшифрования (в зависимости от режима операции, указанного при вызове init) следующих данных.
Примечание: если возникает исключение, перед повторным использованием объект Cipher может потребоваться сбросить.
- Возвращает:
- новый буфер с результатом
- Исключения:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE) -
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находится в неверном состоянии (например, не инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE) -
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 может потребоваться сбросить.
- Параметры:
-
input— входной буфер - Возвращает:
- новый буфер с результатом
- Исключения:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE) -
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 может потребоваться сбросить.
- Параметры:
-
input— входной буфер -
inputOffset— смещение вinput, с которого начинаются входные данные -
inputLen— длина входных данных - Возвращает:
- новый буфер с результатом
- Исключения:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE) -
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 могут ссылаться на один и тот же массив байтов, и при копировании результата в буфер вывода необработанные входные данные не перезаписываются.
- Параметры:
-
input— входной буфер -
inputOffset— смещение вinput, с которого начинаются входные данные -
inputLen— длина входных данных -
output— буфер для результата - Возвращает:
- количество байтов, сохранённых в
output - Вызывает:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не был инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE) -
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 могут ссылаться на один и тот же массив байтов, и при копировании результата в буфер вывода необработанные входные данные не перезаписываются.
- Параметры:
-
input— входной буфер -
inputOffset— смещение вinput, с которого начинаются входные данные -
inputLen— длина входных данных -
output— буфер для результата -
outputOffset— смещение вoutput, по которому сохраняется результат - Возвращает:
- количество байтов, сохранённых в
output - Вызывает:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не был инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE) -
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 могут ссылаться на один и тот же массив байтов, и при копировании результата в буфер вывода необработанные входные данные не перезаписываются.
- Параметры:
-
input— входной ByteBuffer -
output— выходной ByteBuffer - Возвращает:
- количество байтов, сохранённых в
output - Вызывает:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не был инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE) -
IllegalArgumentException— если входной и выходной буферы являются одним и тем же объектом -
ReadOnlyBufferException— если буфер вывода доступен только для чтения -
IllegalBlockSizeException— если данный шифр является блочным шифром, дополнение не было запрошено (только в режиме шифрования), а общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если данный алгоритм шифрования не может обработать предоставленные входные данные. -
ShortBufferException— если в буфере вывода недостаточно места -
BadPaddingException— если этот объектCipherнаходится в режиме расшифрования и было запрошено (снятие) дополнения, но расшифрованные данные не ограничены соответствующими байтами дополнения -
AEADBadTagException— если этот объектCipherрасшифровывает данные в режиме AEAD (например, GCM/CCM), а полученный тег аутентификации не совпадает с вычисленным значением - Начиная с:
- 1.5
wrap
public final byte[] wrap(Key key) throws IllegalBlockSizeException, InvalidKeyException
- Параметры:
-
key— ключ для упаковки - Возвращает:
- упакованный ключ
- Вызывает:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не был инициализирован или не находится в режимеWRAP_MODE) -
IllegalBlockSizeException— если данный шифр является блочным шифром, дополнение не было запрошено, а длина кодированного представления упаковываемого ключа не кратна размеру блока -
InvalidKeyException— если упаковать ключ с помощью данного шифра невозможно или небезопасно (например, если программному шифру передан ключ, защищённый аппаратными средствами) -
UnsupportedOperationException— если соответствующий метод вCipherSpiне поддерживается
unwrap
public final Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException
- Параметры:
-
wrappedKey— ключ для распаковки -
wrappedKeyAlgorithm— алгоритм, связанный с упакованным ключом -
wrappedKeyType— тип упакованного ключа. Должен быть одним из следующих:SECRET_KEY,PRIVATE_KEYилиPUBLIC_KEY - Возвращает:
- распакованный ключ
- Вызывает:
-
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не был инициализирован или не находится в режимеUNWRAP_MODE) -
NoSuchAlgorithmException— если ни один установленный поставщик не может создавать ключи типаwrappedKeyTypeдляwrappedKeyAlgorithm -
InvalidKeyException— еслиwrappedKeyне представляет собой упакованный ключ типаwrappedKeyTypeдляwrappedKeyAlgorithm -
UnsupportedOperationException— если соответствующий метод вCipherSpiне поддерживается
getMaxAllowedKeyLength
public static final int getMaxAllowedKeyLength(String transformation) throws NoSuchAlgorithmException
Integer.MAX_VALUE. Дополнительные сведения о размерах ключей по умолчанию и файлах политики юрисдикции JCE см. в разделе «Криптографические настройки по умолчанию и ограничения» в документации по поставщикам JDK.- Параметры:
-
transformation— преобразование шифра - Возвращает:
- максимальную длину ключа в битах или
Integer.MAX_VALUE - Вызывает:
-
NullPointerException— еслиtransformationравноnull -
NoSuchAlgorithmException— еслиtransformationне является допустимым преобразованием, то есть не имеет вид «algorithm» или «algorithm/mode/padding» - Начиная с:
- 1.5
getMaxAllowedParameterSpec
public static final AlgorithmParameterSpec getMaxAllowedParameterSpec(String transformation) throws NoSuchAlgorithmException
Cipher согласно файлу политики юрисдикции. Если установлены файлы политики юрисдикции JCE с неограниченной криптографической стойкостью или в файле политики не установлен максимальный предел параметров для указанного преобразования, возвращается null.- Параметры:
-
transformation— преобразование шифра - Возвращает:
- объект {code AlgorithmParameterSpec}, содержащий максимальное значение, или
null - Вызывает:
-
NullPointerException— еслиtransformationравноnull -
NoSuchAlgorithmException— еслиtransformationне является допустимым преобразованием, то есть не имеет вид «algorithm» или «algorithm/mode/padding» - Начиная с:
- 1.5
updateAAD
public final void updateAAD(byte[] src)
Вызовы этого метода передают AAD объекту Cipher при работе в таких режимах, как AEAD (GCM/CCM). Если этот объект Cipher работает в режиме GCM или CCM, все данные AAD необходимо предоставить до начала обработки зашифрованного текста (с помощью методов update и doFinal).
- Параметры:
-
src— буфер, содержащий дополнительные данные аутентификации - Вызывает:
-
IllegalArgumentException— если байтовый массивsrcравенnull -
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не был инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE), не принимает AAD либо работает в режиме GCM или CCM и для текущей операции шифрования/расшифрования уже был вызван один из методовupdate -
UnsupportedOperationException— если соответствующий метод вCipherSpiне переопределён реализацией - Начиная с:
- 1.7
updateAAD
public final void updateAAD(byte[] src, int offset, int len)
Вызовы этого метода передают AAD объекту Cipher при работе в таких режимах, как AEAD (GCM/CCM). Если этот объект Cipher работает в режиме GCM или CCM, все данные AAD необходимо предоставить до начала обработки зашифрованного текста (с помощью методов update и doFinal).
- Параметры:
-
src— буфер, содержащий AAD -
offset— смещение вsrc, с которого начинаются входные данные AAD -
len— количество байтов AAD - Вызывает:
-
IllegalArgumentException— если байтовый массивsrcравенnull, либоoffsetилиlengthменьше 0, либо суммаoffsetиlenпревышает длину байтового массиваsrc -
IllegalStateException— если этот объектCipherнаходится в неверном состоянии (например, не был инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE), не принимает AAD либо работает в режиме GCM или CCM и для текущей операции шифрования/расшифрования уже был вызван один из методовupdate -
UnsupportedOperationException— если соответствующий метод вCipherSpiне переопределён реализацией - Начиная с:
- 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находится в неверном состоянии (например, не был инициализирован или не находится в режимеENCRYPT_MODEилиDECRYPT_MODE), не принимает AAD либо работает в режиме GCM или CCM и для текущей операции шифрования/расшифрования уже был вызван один из методовupdate -
UnsupportedOperationException— если соответствующий метод вCipherSpiне переопределён реализацией - Начиная с:
- 1.7
toString
public String toString()
String этого объекта Cipher.
© 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/javax/crypto/Cipher.html