Spec-Zone.ru › OpenJDK 21

Класс Cipher

java.lang.Object
javax.crypto.Cipher
Прямые известные подклассы:
NullCipher
public class Cipher extends Object
Этот класс предоставляет функциональность криптографического шифра для шифрования и дешифрования. Он является ядром фреймворка Java Cryptographic Extension (JCE).

Для создания объекта 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)
Эти трансформации описаны в разделе Шифрование спецификации стандартных имен алгоритмов безопасности Java. Обратитесь к документации вашей реализации, чтобы узнать, какие другие трансформации поддерживаются.
С:
1.4
См. также:
  • KeyGenerator
  • SecretKey

Краткое описание полей

Модификатор и тип Поле Описание
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
Константа, используемая для инициализации шифра в режиме упаковки ключа.

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

Cipher(CipherSpi cipherSpi, Provider provider, String transformation)
Модификатор Конструктор Описание
protected
Создаёт объект Cipher.

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

Модификатор и тип Метод Описание
final byte[] doFinal()
Завершает многоэтапную операцию шифрования или дешифрования, в зависимости от того, как был инициализирован этот объект Cipher.
final byte[] doFinal(byte[] input)
Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию.
final int doFinal(byte[] output, int outputOffset)
Завершает многоэтапную операцию шифрования или дешифрования, в зависимости от того, как был инициализирован этот объект Cipher.
final byte[] doFinal(byte[] input, int inputOffset, int inputLen)
Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию.
final int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output)
Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию.
final int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию.
final int doFinal(ByteBuffer input, ByteBuffer output)
Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию.
final String getAlgorithm()
Возвращает имя алгоритма этого объекта Cipher.
final int getBlockSize()
Возвращает размер блока (в байтах).
final ExemptionMechanism getExemptionMechanism()
Возвращает объект механизма исключения, используемый с этим объектом Cipher.
static final Cipher getInstance(String transformation)
Возвращает объект Cipher, реализующий указанное преобразование.
static final Cipher getInstance(String transformation, String provider)
Возвращает объект Cipher, реализующий указанное преобразование.
static final Cipher getInstance(String transformation, Provider provider)
Возвращает объект Cipher, реализующий указанное преобразование.
final byte[] getIV()
Возвращает вектор инициализации (IV) в новом буфере.
static final int getMaxAllowedKeyLength(String transformation)
Возвращает максимальную длину ключа для указанного преобразования в соответствии с установленными политиками юрисдикции JCE.
static final AlgorithmParameterSpec getMaxAllowedParameterSpec(String transformation)
Возвращает объект {code AlgorithmParameterSpec}, содержащий максимальное значение параметра Cipher в соответствии с файлом политики юрисдикции.
final int getOutputSize(int inputLen)
Возвращает длину в байтах, которая должна иметь буфер вывода, чтобы содержать результат следующей операции update или doFinal, с учётом длины входных данных inputLen (в байтах).
final AlgorithmParameters getParameters()
Возвращает параметры, используемые с этим объектом Cipher.
final Provider getProvider()
Возвращает провайдера этого объекта Cipher.
final void init(int opmode, Certificate certificate)
Инициализирует этот объект Cipher с публичным ключом из данного сертификата.
final void init(int opmode, Certificate certificate, SecureRandom random)
Инициализирует этот объект Cipher с публичным ключом из данного сертификата и источником случайных чисел.
final void init(int opmode, Key key)
Инициализирует этот объект Cipher с ключом.
final void init(int opmode, Key key, AlgorithmParameters params)
Инициализирует этот объект Cipher с ключом и набором параметров алгоритма.
final void init(int opmode, Key key, AlgorithmParameters params, SecureRandom random)
Инициализирует этот объект Cipher с ключом, набором параметров алгоритма и источником случайных чисел.
final void init(int opmode, Key key, SecureRandom random)
Инициализирует этот объект Cipher с ключом и источником случайных чисел.
final void init(int opmode, Key key, AlgorithmParameterSpec params)
Инициализирует этот объект Cipher с ключом и набором параметров алгоритма.
final void init(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random)
Инициализирует этот объект Cipher с ключом, набором параметров алгоритма и источником случайных чисел.
String toString()
Возвращает представление String этого объекта Cipher.
final Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType)
Разворачивает ранее упакованный ключ.
final byte[] update(byte[] input)
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект Cipher), обрабатывая другой фрагмент данных.
final byte[] update(byte[] input, int inputOffset, int inputLen)
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект Cipher), обрабатывая другой фрагмент данных.
final int update(byte[] input, int inputOffset, int inputLen, byte[] output)
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект Cipher), обрабатывая другой фрагмент данных.
final int update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект Cipher), обрабатывая другой фрагмент данных.
final int update(ByteBuffer input, ByteBuffer output)
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект Cipher), обрабатывая другой фрагмент данных.
final void updateAAD(byte[] src)
Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD).
final void updateAAD(byte[] src, int offset, int len)
Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD), используя подмножество предоставленного буфера.
final void updateAAD(ByteBuffer src)
Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD).
final byte[] wrap(Key key)
Упаковывает ключ.

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

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

Подробное описание полей

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.preferred Security для определения предпочтительного порядка поставщиков для указанного алгоритма. Это может отличаться от порядка поставщиков, возвращаемого методом Security.getProviders(). См. также раздел Преобразования шифрования документа JDK Providers для получения информации о значениях по умолчанию для преобразований, используемых поставщиками JDK.
Параметры:
transformation - имя преобразования, например, AES/CBC/PKCS5Padding. См. раздел Шифр в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах преобразований.
Возвращает:
объект Cipher, реализующий затребованное преобразование
Исключения:
NoSuchAlgorithmException - если transformation является null, пустым, в неверном формате, или если ни один поставщик не поддерживает реализацию CipherSpi для указанного алгоритма
NoSuchPaddingException - если transformation содержит схему заполнения, которая недоступна
См. также:
  • Provider

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 - если указанный поставщик не зарегистрирован в списке поставщиков безопасности
См. также:
  • Provider

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 содержит схему заполнения, которая недоступна
См. также:
  • Provider

getProvider

public final Provider getProvider()
Возвращает поставщика этого объекта Cipher.
Возвращает:
поставщик этого объекта Cipher
END_OF_DOCUMENT_MARKER

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, или в контексте шифрования/дешифрования на основе пароля, где 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
Возвращает максимальную длину ключа для указанной трансформации в соответствии с установленными политиками юрисдикции JCE. Если установлены файлы политики юрисдикции JCE с неограниченной силой, будет возвращено 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
Возвращает объект {code AlgorithmParameterSpec}, содержащий максимальное значение параметра 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).

Вызовы этого метода обеспечивают 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), используя подмножество предоставленного буфера.

Вызовы этого метода обеспечивают 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).

Вызовы этого метода предоставляют 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

Spec-Zone.ru

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