Класс Cipher

Прямые известные подклассы:
NullCipher
public class Cipher
extends Object

Этот класс предоставляет функциональность криптографического шифра для шифрования и дешифрования. Он является основой фреймворка Java Cryptographic Extension (JCE).

Для создания объекта Cipher приложение вызывает метод Cipher's 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 вызывающие стороны должны повторно инициализировать объекты шифра с параметрами 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)
  • DES/CBC/NoPadding (56)
  • DES/CBC/PKCS5Padding (56)
  • DES/ECB/NoPadding (56)
  • DES/ECB/PKCS5Padding (56)
  • 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)
Эти преобразования описаны в разделе Cipher спецификации Java Security Standard Algorithm Names. Обратитесь к документации выпуска вашей реализации, чтобы узнать, какие еще преобразования поддерживаются.
С:
1.4
См. также:
KeyGenerator, SecretKey

Поля

Модификатор и тип Поле Описание
static int DECRYPT_MODE

Константа, используемая для инициализации шифра в режиме дешифрования.

static int ENCRYPT_MODE

Константа, используемая для инициализации шифра в режиме шифрования.

static int PRIVATE_KEY

Константа, используемая для указания того, что разворачиваемый ключ является "приватным ключом".

static int PUBLIC_KEY

Константа, используемая для указания того, что разворачиваемый ключ является "публичным ключом".

static int SECRET_KEY

Константа, используемая для указания того, что разворачиваемый ключ является "секретным ключом".

static int UNWRAP_MODE

Константа, используемая для инициализации шифра в режиме разворачивания ключа.

static int WRAP_MODE

Константа, используемая для инициализации шифра в режиме упаковки ключа.

Конструкторы

Модификатор Конструктор Описание
protected Cipher​(CipherSpi cipherSpi, Provider provider, String transformation)

Создаёт объект Cipher.

Методы

Модификатор и тип Метод Описание
byte[] doFinal()

Завершает многоэтапную операцию шифрования или дешифрования, в зависимости от того, как был инициализирован этот шифр.

byte[] doFinal​(byte[] input)

Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию.

int doFinal​(byte[] output, int outputOffset)

Завершает многоэтапную операцию шифрования или дешифрования, в зависимости от того, как был инициализирован этот шифр.

byte[] doFinal​(byte[] input, int inputOffset, int inputLen)

Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию.

int doFinal​(byte[] input, int inputOffset, int inputLen, byte[] output)

Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию.

int doFinal​(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)

Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию.

int doFinal​(ByteBuffer input, ByteBuffer output)

Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию.

String getAlgorithm()

Возвращает имя алгоритма этого объекта Cipher.

int getBlockSize()

Возвращает размер блока (в байтах).

ExemptionMechanism getExemptionMechanism()

Возвращает объект механизма исключений, используемый с этим шифром.

static Cipher getInstance​(String transformation)

Возвращает объект Cipher, который реализует указанное преобразование.

static Cipher getInstance​(String transformation, String provider)

Возвращает объект Cipher, который реализует указанное преобразование.

static Cipher getInstance​(String transformation, Provider provider)

Возвращает объект Cipher, который реализует указанное преобразование.

byte[] getIV()

Возвращает вектор инициализации (IV) в новом буфере.

static int getMaxAllowedKeyLength​(String transformation)

Возвращает максимальную длину ключа для указанного преобразования в соответствии с установленными политиками юрисдикции JCE.

static AlgorithmParameterSpec getMaxAllowedParameterSpec​(String transformation)

Возвращает объект AlgorithmParameterSpec, содержащий максимальное значение параметра шифрования в соответствии с файлом политики юрисдикции.

int getOutputSize​(int inputLen)

Возвращает длину в байтах, которую должен иметь выходной буфер для хранения результата следующей операции update или doFinal, учитывая длину входных данных inputLen (в байтах).

AlgorithmParameters getParameters()

Возвращает параметры, используемые с этим шифром.

Provider getProvider()

Возвращает поставщика этого объекта Cipher.

void init​(int opmode, Certificate certificate)

Инициализирует этот шифр с открытым ключом из заданного сертификата.

void init​(int opmode, Certificate certificate, SecureRandom random)

Инициализирует этот шифр с открытым ключом из заданного сертификата и источником случайных чисел.

void init​(int opmode, Key key)

Инициализирует этот шифр с ключом.

void init​(int opmode, Key key, AlgorithmParameters params)

Инициализирует этот шифр с ключом и набором параметров алгоритма.

void init​(int opmode, Key key, AlgorithmParameters params, SecureRandom random)

Инициализирует этот шифр с ключом, набором параметров алгоритма и источником случайных чисел.

void init​(int opmode, Key key, SecureRandom random)

Инициализирует этот шифр с ключом и источником случайных чисел.

void init​(int opmode, Key key, AlgorithmParameterSpec params)

Инициализирует этот шифр с ключом и набором параметров алгоритма.

void init​(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random)

Инициализирует этот шифр с ключом, набором параметров алгоритма и источником случайных чисел.

Key unwrap​(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType)

Расшифровывает ранее зашифрованный ключ.

byte[] update​(byte[] input)

Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных.

byte[] update​(byte[] input, int inputOffset, int inputLen)

Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных.

int update​(byte[] input, int inputOffset, int inputLen, byte[] output)

Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных.

int update​(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)

Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных.

int update​(ByteBuffer input, ByteBuffer output)

Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных.

void updateAAD​(byte[] src)

Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD).

void updateAAD​(byte[] src, int offset, int len)

Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD), используя подмножество предоставленного буфера.

void updateAAD​(ByteBuffer src)

Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD).

byte[] wrap​(Key key)

Зашифровывает ключ.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, 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 - преобразование

Методы

getInstance

public static final Cipher getInstance(String transformation)
                                throws NoSuchAlgorithmException,
                                       NoSuchPaddingException

Возвращает объект шифра, реализующий указанное преобразование.

Этот метод проходит по списку зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект Cipher, инкапсулирующий реализацию CipherSpi из первого поставщика, поддерживающего указанный алгоритм.

Обратите внимание, что список зарегистрированных поставщиков можно получить через метод получения поставщиков.

Примечание о реализации:
Реализация JDK Reference дополнительно использует свойство jdk.security.provider.preferred Security для определения предпочтительного порядка поставщиков для указанного алгоритма. Это может отличаться от порядка поставщиков, возвращаемых методом получения поставщиков.
Параметры:
transformation - имя преобразования, например, AES/CBC/PKCS5Padding. См. раздел Cipher в Спецификации имен стандартных алгоритмов Java Security для получения информации об именах стандартных преобразований.
Возвращает:
шифр, реализующий запрошенное преобразование
Исключение:
NoSuchAlgorithmException - если transformation является null, пустым, в некорректном формате или если ни один Provider не поддерживает реализацию CipherSpi для указанного алгоритма
NoSuchPaddingException - если transformation содержит схему заполнения, которая недоступна
См. также:
Provider

getInstance

public static final Cipher getInstance(String transformation,
                                       String provider)
                                throws NoSuchAlgorithmException,
                                       NoSuchProviderException,
                                       NoSuchPaddingException

Возвращает объект шифра, реализующий указанное преобразование.

Возвращается новый объект Cipher, инкапсулирующий реализацию CipherSpi от указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.

Обратите внимание, что список зарегистрированных поставщиков можно получить через метод получения поставщиков.

Параметры:
transformation - имя преобразования, например, AES/CBC/PKCS5Padding. См. раздел Cipher в Спецификации имен стандартных алгоритмов Java Security для получения информации об именах стандартных преобразований.
provider - имя поставщика.
Возвращает:
шифр, реализующий запрошенное преобразование
Исключение:
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, инкапсулирующий реализацию CipherSpi из указанного объекта Provider. Обратите внимание, что указанный объект Provider не обязательно должен быть зарегистрирован в списке поставщиков.

Параметры:
transformation - имя преобразования, например, AES/CBC/PKCS5Padding. См. раздел Cipher в Спецификации имен стандартных алгоритмов Java Security для получения информации об именах стандартных преобразований.
provider - поставщик.
Возвращает:
шифр, реализующий запрошенное преобразование
Исключение:
IllegalArgumentException - если provider является null
NoSuchAlgorithmException - если transformation является null, пустым, в некорректном формате, или если реализация CipherSpi для указанного алгоритма недоступна от указанного объекта Provider
NoSuchPaddingException - если transformation содержит схему заполнения, которая недоступна
См. также:
Provider

getProvider

public final Provider getProvider()

Возвращает поставщика данного объекта шифра.

Возвращает:
поставщик данного объекта шифра

getAlgorithm

public final String getAlgorithm()

Возвращает имя алгоритма данного объекта шифра.

Это то же имя, которое было указано в одном из вызовов getInstance, которые создали этот объект шифра.

Возвращает:
имя алгоритма данного объекта шифра.

getBlockSize

public final int getBlockSize()

Возвращает размер блока (в байтах).

Возвращает:
размер блока (в байтах) или 0, если основной алгоритм не является блочным шифром

getOutputSize

public final int getOutputSize(int inputLen)

Возвращает длину в байтах, которую должен иметь буфер вывода, чтобы содержать результат следующей операции шифрования или дешифрования, с учётом длины входных данных (в байтах).

Этот вызов учитывает любые необработанные (буферизованные) данные из предыдущего вызова, заполнение и тэги AEAD.

Фактическая длина вывода следующего вызова шифрования или дешифрования может быть меньше, чем длина, возвращаемая этим методом.

Параметры:
inputLen - длина входных данных (в байтах)
Возвращает:
требуемый размер буфера вывода (в байтах)
Исключение:
IllegalStateException - если этот шифр находится в неправильном состоянии (например, ещё не был инициализирован)

getIV

public final byte[] getIV()

Возвращает вектор инициализации (IV) в новом буфере.

Это полезно в случае, если был создан случайный IV, или в контексте шифрования/дешифрования на основе пароля, где IV выводится из предоставленного пользователем пароля.

Возвращает:
вектор инициализации в новом буфере или null, если основной алгоритм не использует IV, или если IV ещё не установлен.

getParameters

public final AlgorithmParameters getParameters()

Возвращает параметры, используемые с этим шифром.

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

Возвращает:
используемые параметры шифра, или null, если этот шифр не использует параметров.

getExemptionMechanism

public final ExemptionMechanism getExemptionMechanism()

Возвращает объект механизма освобождения, используемый с этим шифром.

Возвращает:
объект механизма освобождения, используемый с этим шифром, или null, если этот шифр не использует никакого механизма освобождения.

init

public final void init(int opmode,
                       Key key)
                throws InvalidKeyException

Инициализирует этот шифр с помощью ключа.

Шифр инициализируется для одной из следующих четырёх операций: шифрования, дешифрования, обертывания ключа или распаковки ключа, в зависимости от значения режима.

Если этот шифр требует каких-либо параметров алгоритма, которые не могут быть получены из данного ключа, основная реализация шифра должна сгенерировать необходимые параметры сама (используя значения по умолчанию или случайные значения, специфичные для поставщика), если она инициализируется для шифрования или обертывания ключа, и вызвать соответствующие методы при инициализации для дешифрования или распаковки ключа. Сгенерированные параметры можно получить, используя getParameters или getIV (если параметром является IV).

Если этот шифр требует параметров алгоритма, которые не могут быть получены из входных параметров, и нет разумных значений по умолчанию, специфичных для поставщика, инициализация обязательно завершится неудачей.

Если этот шифр (включая его схему обратной связи или заполнения) требует случайных байтов (например, для генерации параметров), он получит их, используя реализацию SecureRandom поставщика с наивысшим приоритетом, установленного в системе, как источник случайности. (Если ни один из установленных поставщиков не предоставляет реализацию SecureRandom, будет использован системный источник случайности.)

Обратите внимание, что при инициализации объекта Cipher он теряет все ранее полученные состояния. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.

Параметры:
opmode - режим операции этого шифра (это один из следующих: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE или UNWRAP_MODE)
key - ключ
Исключение:
InvalidKeyException - если предоставленный ключ неприемлем для инициализации этого шифра, или требует параметров алгоритма, которые невозможно определить из данного ключа, или если размер ключа превышает максимально разрешенный размер ключа (как определено из файлов политики юрисдикции).
UnsupportedOperationException - если opmode является WRAP_MODE или UNWRAP_MODE, но режим не реализован основной CipherSpi.

init

public final void init(int opmode,
                       Key key,
                       SecureRandom random)
                throws InvalidKeyException

Инициализирует этот шифр с помощью ключа и источника случайных чисел.

Шифр инициализируется для одной из следующих четырёх операций: шифрование, дешифрование, упаковка ключа или распаковка ключа, в зависимости от значения opmode.

Если этот шифр требует каких-либо параметров алгоритма, которые не могут быть получены из заданного key, базовая реализация шифра должна сама генерировать необходимые параметры (используя значения по умолчанию или случайные значения, специфичные для поставщика), если он инициализируется для шифрования или упаковки ключа, и вызывать InvalidKeyException, если он инициализируется для дешифрования или распаковки ключа. Сгенерированные параметры могут быть получены с помощью getParameters или getIV (если параметр является IV).

Если этот шифр требует параметров алгоритма, которые не могут быть получены из входных параметров, и нет разумных значений по умолчанию, специфичных для поставщика, инициализация обязательно завершится неудачей.

Если этот шифр (включая его базовую схему обратной связи или заполнения) требует каких-либо случайных байтов (например, для генерации параметров), он получит их из random.

Обратите внимание, что при инициализации объекта Cipher он теряет все ранее полученное состояние. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.

Parameters:
opmode - режим работы этого шифра (это один из следующих: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE или UNWRAP_MODE)
key - ключ шифрования
random - источник случайных чисел
Throws:
InvalidKeyException - если заданный ключ не подходит для инициализации этого шифра, или требует параметров алгоритма, которые не могут быть определены из заданного ключа, или если заданный ключ имеет размер ключа, который превышает максимально допустимый размер ключа (как определено из сконфигурированных файлов политики юрисдикции).
UnsupportedOperationException - если opmode является WRAP_MODE или UNWRAP_MODE, но режим не реализован базовым CipherSpi.

init

public final void init(int opmode,
                       Key key,
                       AlgorithmParameterSpec params)
                throws InvalidKeyException,
                       InvalidAlgorithmParameterException

Инициализирует этот шифр с помощью ключа и набора параметров алгоритма.

Шифр инициализируется для одной из следующих четырёх операций: шифрование, дешифрование, упаковка ключа или распаковка ключа, в зависимости от значения opmode.

Если этот шифр требует каких-либо параметров алгоритма и params является null, базовая реализация шифра должна сама генерировать необходимые параметры (используя значения по умолчанию или случайные значения, специфичные для поставщика), если он инициализируется для шифрования или упаковки ключа, и вызывать InvalidAlgorithmParameterException если он инициализируется для дешифрования или распаковки ключа. Сгенерированные параметры могут быть получены с помощью getParameters или getIV (если параметр является IV).

Если этот шифр требует параметров алгоритма, которые не могут быть получены из входных параметров, и нет разумных значений по умолчанию, специфичных для поставщика, инициализация обязательно завершится неудачей.

Если этот шифр (включая его базовую схему обратной связи или заполнения) требует каких-либо случайных байтов (например, для генерации параметров), он получит их с помощью реализации SecureRandom поставщика с наивысшим приоритетом. (Если ни один из установленных поставщиков не предоставляет реализацию SecureRandom, будет использоваться системный источник случайных чисел).

Обратите внимание, что при инициализации объекта Cipher он теряет всё ранее полученное состояние. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.

Parameters:
opmode - режим работы этого шифра (это один из следующих: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE или UNWRAP_MODE)
key - ключ шифрования
params - параметры алгоритма
Throws:
InvalidKeyException - если заданный ключ не подходит для инициализации этого шифра, или его размер ключа превышает максимально допустимый размер ключа (как определено из сконфигурированных файлов политики юрисдикции).
InvalidAlgorithmParameterException - если заданные параметры алгоритма не подходят для этого шифра, или этот шифр требует параметров алгоритма, и params является null, или заданные параметры алгоритма подразумевают криптографическую стойкость, которая превысит юридические ограничения (как определено из сконфигурированных файлов политики юрисдикции).
UnsupportedOperationException - если opmode является WRAP_MODE или UNWRAP_MODE, но режим не реализован базовым CipherSpi.

init

public final void init(int opmode,
                       Key key,
                       AlgorithmParameterSpec params,
                       SecureRandom random)
                throws InvalidKeyException,
                       InvalidAlgorithmParameterException

Инициализирует этот шифр с помощью ключа, набора параметров алгоритма и источника случайных чисел.

Шифр инициализируется для одной из следующих четырёх операций: шифрование, дешифрование, упаковка ключа или распаковка ключа, в зависимости от значения opmode.

Если этот шифр требует каких-либо параметров алгоритма и params является null, базовая реализация шифра должна сама генерировать необходимые параметры (используя значения по умолчанию или случайные значения, специфичные для поставщика), если он инициализируется для шифрования или упаковки ключа, и вызывать InvalidAlgorithmParameterException если он инициализируется для дешифрования или распаковки ключа. Сгенерированные параметры могут быть получены с помощью getParameters или getIV (если параметр является IV).

Если этот шифр требует параметров алгоритма, которые не могут быть получены из входных параметров, и нет разумных значений по умолчанию, специфичных для поставщика, инициализация обязательно завершится неудачей.

Если этот шифр (включая его базовую схему обратной связи или заполнения) требует каких-либо случайных байтов (например, для генерации параметров), он получит их из random.

Обратите внимание, что при инициализации объекта Cipher он теряет всё ранее полученное состояние. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.

Parameters:
opmode - режим работы этого шифра (это один из следующих: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE или UNWRAP_MODE)
key - ключ шифрования
params - параметры алгоритма
random - источник случайных чисел
Throws:
InvalidKeyException - если заданный ключ не подходит для инициализации этого шифра, или его размер ключа превышает максимально допустимый размер ключа (как определено из сконфигурированных файлов политики юрисдикции).
InvalidAlgorithmParameterException - если заданные параметры алгоритма не подходят для этого шифра, или этот шифр требует параметров алгоритма, и params является null, или заданные параметры алгоритма подразумевают криптографическую стойкость, которая превысит юридические ограничения (как определено из сконфигурированных файлов политики юрисдикции).
UnsupportedOperationException - если opmode является WRAP_MODE или UNWRAP_MODE, но режим не реализован базовым CipherSpi.

init

public final void init(int opmode,
                       Key key,
                       AlgorithmParameters params)
                throws InvalidKeyException,
                       InvalidAlgorithmParameterException

Инициализирует этот шифр с помощью ключа и набора параметров алгоритма.

Шифр инициализируется для одной из следующих четырёх операций: шифрование, дешифрование, упаковка ключа или распаковка ключа, в зависимости от значения opmode.

Если этот шифр требует каких-либо параметров алгоритма и params является null, базовая реализация шифра должна сама генерировать необходимые параметры (используя значения по умолчанию или случайные значения, специфичные для поставщика), если он инициализируется для шифрования или упаковки ключа, и вызывать InvalidAlgorithmParameterException если он инициализируется для дешифрования или распаковки ключа. Сгенерированные параметры могут быть получены с помощью getParameters или getIV (если параметр является IV).

Если этот шифр требует параметров алгоритма, которые не могут быть получены из входных параметров, и нет разумных значений по умолчанию, специфичных для поставщика, инициализация обязательно завершится неудачей.

Если этот шифр (включая его базовую схему обратной связи или заполнения) требует каких-либо случайных байтов (например, для генерации параметров), он получит их с помощью реализации SecureRandom поставщика с наивысшим приоритетом. (Если ни один из установленных поставщиков не предоставляет реализацию SecureRandom, будет использоваться системный источник случайных чисел).

Обратите внимание, что при инициализации объекта Cipher он теряет всё ранее полученное состояние. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.

Parameters:
opmode - режим работы этого шифра (это один из следующих: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE или UNWRAP_MODE)
key - ключ шифрования
params - параметры алгоритма
Throws:
InvalidKeyException - если заданный ключ не подходит для инициализации этого шифра, или его размер ключа превышает максимально допустимый размер ключа (как определено из сконфигурированных файлов политики юрисдикции).
InvalidAlgorithmParameterException - если заданные параметры алгоритма не подходят для этого шифра, или этот шифр требует параметров алгоритма, и params является null, или заданные параметры алгоритма подразумевают криптографическую стойкость, которая превысит юридические ограничения (как определено из сконфигурированных файлов политики юрисдикции).
UnsupportedOperationException - если opmode является WRAP_MODE или UNWRAP_MODE, но режим не реализован базовым CipherSpi.

init

public final void init(int opmode,
                       Key key,
                       AlgorithmParameters params,
                       SecureRandom random)
                throws InvalidKeyException,
                       InvalidAlgorithmParameterException

Инициализирует этот шифр с ключом, набором параметров алгоритма и источником случайности.

Шифр инициализируется для одной из четырёх операций: шифрования, дешифрования, обертывания ключа или распаковки ключа, в зависимости от значения opmode.

Если этому шифру необходимы какие-либо параметры алгоритма и params равно null, реализация подлежащего шифра должна сгенерировать необходимые параметры сама (используя параметры по умолчанию или случайные значения, специфичные для поставщика) в случае инициализации для шифрования или обертывания ключа и выбросить исключение InvalidAlgorithmParameterException, если инициализация происходит для дешифрования или распаковки ключа. Сгенерированные параметры можно получить, используя getParameters или getIV (если параметр является IV).

Если этому шифру необходимы параметры алгоритма, которые нельзя получить из входных параметров, и нет разумных значений по умолчанию, специфичных для поставщика, инициализация обязательно завершится неудачей.

Если этому шифру (включая его схему обратной связи или схему заполнения) необходимы какие-либо случайные байты (например, для генерации параметров), они будут получены из random.

Обратите внимание, что при инициализации объекта Cipher он теряет все ранее полученное состояние. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.

Параметры:
opmode - режим работы этого шифра (это одно из следующих: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE или UNWRAP_MODE)
key - криптографический ключ
params - параметры алгоритма
random - источник случайности
Исключения:
InvalidKeyException - если заданный ключ не подходит для инициализации этого шифра или его размер ключа превышает максимально допустимый размер ключа (определяется файлами политики юрисдикции).
InvalidAlgorithmParameterException - если заданные параметры алгоритма не подходят для этого шифра или этому шифру необходимы параметры алгоритма, и params равно null, или заданные параметры алгоритма подразумевают криптографическую силу, которая превышает установленные правовые ограничения (определяется файлами политики юрисдикции).
UnsupportedOperationException - если opmode равно WRAP_MODE или UNWRAP_MODE, но режим не реализован подлежащим CipherSpi.

init

public final void init(int opmode,
                       Certificate certificate)
                throws InvalidKeyException

Инициализирует этот шифр с открытым ключом из заданного сертификата.

Шифр инициализируется для одной из четырёх операций: шифрования, дешифрования, обертывания ключа или распаковки ключа, в зависимости от значения opmode.

Если сертификат типа X.509 и имеет поле расширения key usage, отмеченное как критическое, и значение поля расширения key usage подразумевает, что открытый ключ в сертификате и соответствующий ему закрытый ключ не должны использоваться для операции, представленной значением opmode, выбрасывается исключение InvalidKeyException.

Если этому шифру требуются какие-либо параметры алгоритма, которые нельзя получить из открытого ключа в заданном сертификате, подлежащая реализация шифра должна сгенерировать необходимые параметры сама (используя параметры по умолчанию или случайные значения, специфичные для поставщика), если инициализация происходит для шифрования или обертывания ключа, и выбросить исключение InvalidKeyException при инициализации для дешифрования или распаковки ключа. Сгенерированные параметры можно получить, используя getParameters или getIV (если параметр является IV).

Если этому шифру необходимы параметры алгоритма, которые нельзя получить из входных данных, и нет разумных значений по умолчанию, специфичных для поставщика, инициализация обязательно завершится неудачей.

Если этому шифру (включая его схему обратной связи или схему заполнения) необходимы какие-либо случайные байты (например, для генерации параметров), он получит их, используя реализацию SecureRandom поставщика с наивысшим приоритетом, установленного как источник случайности. (Если ни один из установленных поставщиков не предоставляет реализацию SecureRandom, будет использован системный источник случайности).

Обратите внимание, что при инициализации объекта Cipher он теряет все ранее полученное состояние. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.

Параметры:
opmode - режим работы этого шифра (это одно из следующих: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE или UNWRAP_MODE)
certificate - сертификат
Исключения:
InvalidKeyException - если открытый ключ в заданном сертификате не подходит для инициализации этого шифра, или этому шифру требуются параметры алгоритма, которые нельзя определить из открытого ключа в заданном сертификате, или размер ключа открытого ключа в заданном сертификате превышает максимально допустимый размер ключа (определяется файлами политики юрисдикции).
UnsupportedOperationException - если opmode равно WRAP_MODE или UNWRAP_MODE, но режим не реализован подлежащим CipherSpi.

init

public final void init(int opmode,
                       Certificate certificate,
                       SecureRandom random)
                throws InvalidKeyException

Инициализирует этот шифр с открытым ключом из заданного сертификата и источником случайности.

Шифр инициализируется для одной из четырёх операций: шифрования, дешифрования, обертывания ключа или распаковки ключа, в зависимости от значения opmode.

Если сертификат типа X.509 и имеет поле расширения key usage, отмеченное как критическое, и значение поля расширения key usage подразумевает, что открытый ключ в сертификате и соответствующий ему закрытый ключ не должны использоваться для операции, представленной значением opmode, выбрасывается исключение InvalidKeyException.

Если этому шифру необходимы какие-либо параметры алгоритма, которые нельзя получить из открытого ключа в данном certificate, подлежащая реализация шифра должна сгенерировать необходимые параметры сама (используя параметры по умолчанию или случайные значения, специфичные для поставщика), если инициализация происходит для шифрования или обертывания ключа, и выбросить исключение InvalidKeyException при инициализации для дешифрования или распаковки ключа. Сгенерированные параметры можно получить, используя getParameters или getIV (если параметр является IV).

Если этому шифру необходимы параметры алгоритма, которые нельзя получить из входных данных, и нет разумных значений по умолчанию, специфичных для поставщика, инициализация обязательно завершится неудачей.

Если этому шифру (включая его схему обратной связи или схему заполнения) необходимы какие-либо случайные байты (например, для генерации параметров), они будут получены из random.

Обратите внимание, что при инициализации объекта Cipher он теряет все ранее полученное состояние. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.

Параметры:
opmode - режим работы этого шифра (это одно из следующих: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE или UNWRAP_MODE)
certificate - сертификат
random - источник случайности
Исключения:
InvalidKeyException - если открытый ключ в заданном сертификате не подходит для инициализации этого шифра, или этому шифру требуются параметры алгоритма, которые нельзя определить из открытого ключа в заданном сертификате, или размер ключа открытого ключа в заданном сертификате превышает максимально допустимый размер ключа (определяется файлами политики юрисдикции).
UnsupportedOperationException - если opmode равно WRAP_MODE или UNWRAP_MODE, но режим не реализован подлежащим CipherSpi.

update

public final byte[] update(byte[] input)

Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных.

Байты в буфере input обрабатываются, и результат хранится в новом буфере.

Если длина input равна нулю, этот метод возвращает null.

Параметры:
input - входной буфер
Возвращает:
новый буфер с результатом или null, если подлежащий шифр — шифр блочного типа, а входные данные слишком коротки для получения нового блока.
Исключения:
IllegalStateException - если этот шифр находится в неправильном состоянии (например, не был инициализирован)

update

public final byte[] update(byte[] input,
                           int inputOffset,
                           int inputLen)

Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных.

Первые inputLen байтов в буфере input, начиная с inputOffset включительно, обрабатываются, и результат хранится в новом буфере.

Если inputLen равно нулю, этот метод возвращает null.

Параметры:
input - входной буфер
inputOffset - смещение в input, где начинается входной фрагмент
inputLen - длина входных данных
Возвращает:
новый буфер с результатом или null, если подлежащий шифр — шифр блочного типа, а входные данные слишком коротки для получения нового блока.
Исключения:
IllegalStateException - если этот шифр находится в неправильном состоянии (например, не был инициализирован)

update

public final int update(byte[] input,
                        int inputOffset,
                        int inputLen,
                        byte[] output)
                 throws ShortBufferException

Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных.

Первые inputLen байтов в буфере input, начиная с inputOffset включительно, обрабатываются, и результат хранится в буфере output.

Если буфер output слишком мал для хранения результата, выбрасывается исключение ShortBufferException. В этом случае повторите этот вызов с более крупным буфером вывода. Используйте getOutputSize для определения размера буфера вывода.

Если inputLen равно нулю, этот метод возвращает длину ноль.

Примечание: этот метод должен быть безопасным для копирования, что означает, что буферы input и output могут ссылаться на один и тот же массив байтов, и при копировании результата в буфер вывода не будут перезаписаны необработанные входные данные.

Параметры:
input - буфер входных данных
inputOffset - смещение в input, с которого начинается входной буфер
inputLen - длина входных данных
output - буфер для результата
Возвращает:
количество байтов, записанных в output
Исключения:
IllegalStateException - если шифр находится в неправильном состоянии (например, не был инициализирован)
ShortBufferException - если предоставленный буфер вывода слишком мал для хранения результата

update

public final int update(byte[] input,
                        int inputOffset,
                        int inputLen,
                        byte[] output,
                        int outputOffset)
                 throws ShortBufferException

Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован шифр), обрабатывая еще один фрагмент данных.

Первые inputLen байтов в буфере input, начиная со смещения inputOffset, обрабатываются, а результат записывается в буфер output, начиная со смещения outputOffset.

Если буфер output слишком мал для хранения результата, будет брошено исключение ShortBufferException. В этом случае повторите вызов с более крупным буфером вывода. Используйте getOutputSize, чтобы определить, каким должен быть размер буфера вывода.

Если длина входных данных равна нулю, этот метод возвращает ноль.

Примечание: этот метод должен быть безопасным для копирования, что означает, что буферы input и output могут ссылаться на один и тот же массив байтов, и при копировании результата в буфер вывода не перезаписываются необработанные входные данные.

Параметры:
input - буфер входных данных
inputOffset - смещение в input, с которого начинается входной буфер
inputLen - длина входных данных
output - буфер для результата
outputOffset - смещение в output, куда сохраняется результат
Возвращает:
количество байтов, записанных в output
Исключения:
IllegalStateException - если шифр находится в неправильном состоянии (например, не был инициализирован)
ShortBufferException - если предоставленный буфер вывода слишком мал для хранения результата

update

public final int update(ByteBuffer input,
                        ByteBuffer output)
                 throws ShortBufferException

Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован шифр), обрабатывая еще один фрагмент данных.

Обрабатываются все input.remaining() байты, начиная со смещения input.position(). Результат записывается в буфер вывода. По завершении, позиция буфера входных данных будет равна его пределу; его предел не изменится. Позиция буфера вывода будет смещена на n, где n - значение, возвращаемое этим методом; предел буфера вывода не изменится.

Если output.remaining() байтов недостаточно для хранения результата, будет брошено исключение ShortBufferException. В этом случае повторите вызов с более крупным буфером вывода. Используйте getOutputSize, чтобы определить, каким должен быть размер буфера вывода.

Примечание: этот метод должен быть безопасным для копирования, что означает, что буферы input и output могут ссылаться на один и тот же блок памяти, и при копировании результата в буфер вывода не перезаписываются необработанные входные данные.

Параметры:
input - буфер входных данных (ByteBuffer)
output - буфер вывода (ByteBuffer)
Возвращает:
количество байтов, записанных в output
Исключения:
IllegalStateException - если шифр находится в неправильном состоянии (например, не был инициализирован)
IllegalArgumentException - если входной и выходной буферы - один и тот же объект
ReadOnlyBufferException - если буфер вывода является только для чтения
ShortBufferException - если в буфере вывода недостаточно места
С:
1.5

doFinal

public final byte[] doFinal()
                     throws IllegalBlockSizeException,
                            BadPaddingException

Завершает многоэтапную операцию шифрования или дешифрования, в зависимости от того, как был инициализирован шифр.

Обрабатываются входные данные, которые могли быть буферизированы во время предыдущей операции update, с применением заполнения (если необходимо). Если используется режим AEAD, такой как GCM/CCM, тег аутентификации добавляется при шифровании или проверяется при дешифровании. Результат сохраняется в новом буфере.

После завершения этот метод сбрасывает объект шифра в состояние, в котором он находился при предыдущей инициализации с помощью вызова init. То есть объект сброшен и готов к шифрованию или дешифрованию (в зависимости от режима операции, указанного в вызове init) дополнительных данных.

Примечание: если было выброшено исключение, объект шифра может потребоваться сбросить, прежде чем его можно будет использовать повторно.

Возвращает:
новый буфер с результатом
Исключения:
IllegalStateException - если шифр находится в неправильном состоянии (например, не был инициализирован)
IllegalBlockSizeException - если шифр является блочным шифром, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные.
BadPaddingException - если шифр работает в режиме дешифрования, и заполнение было запрошено, но дешифрованные данные не ограничены соответствующими байтами заполнения
AEADBadTagException - если шифр дешифрует в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением

doFinal

public final int doFinal(byte[] output,
                         int outputOffset)
                  throws IllegalBlockSizeException,
                         ShortBufferException,
                         BadPaddingException

Завершает многоэтапную операцию шифрования или дешифрования, в зависимости от того, как был инициализирован шифр.

Обрабатываются входные данные, которые могли быть буферизированы во время предыдущей операции update, с применением заполнения (если необходимо). Если используется режим AEAD, такой как GCM/CCM, тег аутентификации добавляется при шифровании или проверяется при дешифровании. Результат сохраняется в буфере output, начиная со смещения outputOffset.

Если буфер output слишком мал для хранения результата, будет брошено исключение ShortBufferException. В этом случае повторите вызов с более крупным буфером вывода. Используйте getOutputSize, чтобы определить, каким должен быть размер буфера вывода.

После завершения этот метод сбрасывает объект шифра в состояние, в котором он находился при предыдущей инициализации с помощью вызова init. То есть объект сброшен и готов к шифрованию или дешифрованию (в зависимости от режима операции, указанного в вызове init) дополнительных данных.

Примечание: если было выброшено исключение, объект шифра может потребоваться сбросить, прежде чем его можно будет использовать повторно.

Параметры:
output - буфер для результата
outputOffset - смещение в output, куда сохраняется результат
Возвращает:
количество байтов, записанных в output
Исключения:
IllegalStateException - если шифр находится в неправильном состоянии (например, не был инициализирован)
IllegalBlockSizeException - если шифр является блочным шифром, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные.
ShortBufferException - если предоставленный буфер вывода слишком мал для хранения результата
BadPaddingException - если шифр работает в режиме дешифрования, и заполнение было запрошено, но дешифрованные данные не ограничены соответствующими байтами заполнения
AEADBadTagException - если шифр дешифрует в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением

doFinal

public final byte[] doFinal(byte[] input)
                     throws IllegalBlockSizeException,
                            BadPaddingException

Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. Данные шифруются или дешифруются в зависимости от того, как был инициализирован шифр.

Байты в буфере input и любые входные байты, которые могли быть буферизированы во время предыдущей операции update, обрабатываются с применением заполнения (если необходимо). Если используется режим AEAD, такой как GCM/CCM, тег аутентификации добавляется при шифровании или проверяется при дешифровании. Результат сохраняется в новом буфере.

После завершения этот метод сбрасывает объект шифра в состояние, в котором он находился при предыдущей инициализации с помощью вызова init. То есть объект сброшен и готов к шифрованию или дешифрованию (в зависимости от режима операции, указанного в вызове init) дополнительных данных.

Примечание: если было выброшено исключение, объект шифра может потребоваться сбросить, прежде чем его можно будет использовать повторно.

Параметры:
input - буфер входных данных
Возвращает:
новый буфер с результатом
Исключения:
IllegalStateException - если шифр находится в неправильном состоянии (например, не был инициализирован)
IllegalBlockSizeException - если шифр является блочным шифром, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные.
BadPaddingException - если шифр работает в режиме дешифрования, и заполнение было запрошено, но дешифрованные данные не ограничены соответствующими байтами заполнения
AEADBadTagException - если шифр дешифрует в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением

doFinal

public final byte[] doFinal(byte[] input,
                            int inputOffset,
                            int inputLen)
                     throws IllegalBlockSizeException,
                            BadPaddingException

Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. Данные шифруются или дешифруются в зависимости от того, как был инициализирован шифр.

Первые inputLen байтов в буфере input, начиная со смещения inputOffset, и любые входные байты, которые могли быть буферизированы во время предыдущей операции update, обрабатываются с применением заполнения (если необходимо). Если используется режим AEAD, такой как GCM/CCM, тег аутентификации добавляется при шифровании или проверяется при дешифровании. Результат сохраняется в новом буфере.

После завершения этот метод сбрасывает объект шифра в состояние, в котором он находился при предыдущей инициализации с помощью вызова init. То есть объект сброшен и готов к шифрованию или дешифрованию (в зависимости от режима операции, указанного в вызове init) дополнительных данных.

Примечание: если было выброшено исключение, объект шифра может потребоваться сбросить, прежде чем его можно будет использовать повторно.

Параметры:
input - буфер ввода
inputOffset - смещение в input, где начинается ввод
inputLen - длина ввода
Возвращает:
новый буфер с результатом
Выбрасывает:
IllegalStateException - если этот шифр находится в неправильном состоянии (например, не был инициализирован)
IllegalBlockSizeException - если этот шифр является блочным шифром, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные.
BadPaddingException - если этот шифр находится в режиме дешифрования, и (раз)заполнение было запрошено, но дешифрованные данные не ограничены соответствующими байтами заполнения
AEADBadTagException - если этот шифр дешифровывает в режиме AEAD (например, GCM/CCM), и полученная метка аутентификации не совпадает с вычисленным значением

doFinal

public final int doFinal(byte[] input,
                         int inputOffset,
                         int inputLen,
                         byte[] output)
                  throws ShortBufferException,
                         IllegalBlockSizeException,
                         BadPaddingException

Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. Данные шифруются или дешифруются в зависимости от того, как был инициализирован этот шифр.

Первые inputLen байты в буфере input, начиная со смещения inputOffset, и любые входные байты, которые могли быть буферизованы во время предыдущей операции update, обрабатываются с применением заполнения (если запрошено). Если используется режим AEAD, такой как GCM/CCM, метка аутентификации добавляется в случае шифрования или проверяется в случае дешифрования. Результат сохраняется в буфере output.

Если буфер output слишком мал для хранения результата, выбрасывается ShortBufferException. В этом случае повторите этот вызов с большим выходным буфером. Используйте getOutputSize для определения размера выходного буфера.

После завершения этот метод сбрасывает объект шифра до состояния, в котором он был при предыдущей инициализации с помощью вызова init. То есть, объект сбрасывается и готов для шифрования или дешифрования (в зависимости от режима операции, указанного в вызове init) дополнительных данных.

Примечание: если возникает какое-либо исключение, объект шифра может потребовать сброса перед повторным использованием.

Примечание: этот метод должен быть безопасным для копирования, что означает, что буферы input и output могут ссылаться на один и тот же массив байтов, и необработанные входные данные не перезаписываются при копировании результата в выходной буфер.

Параметры:
input - буфер ввода
inputOffset - смещение в input буфера, где начинается ввод
inputLen - длина ввода
output - буфер для результата
Возвращает:
количество байтов, сохранённых в output
Выбрасывает:
IllegalStateException - если этот шифр находится в неправильном состоянии (например, не был инициализирован)
IllegalBlockSizeException - если этот шифр является блочным шифром, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные.
ShortBufferException - если заданный выходной буфер слишком мал для хранения результата
BadPaddingException - если этот шифр находится в режиме дешифрования, и (раз)заполнение было запрошено, но дешифрованные данные не ограничены соответствующими байтами заполнения
AEADBadTagException - если этот шифр дешифровывает в режиме AEAD (например, GCM/CCM), и полученная метка аутентификации не совпадает с вычисленным значением

doFinal

public final int doFinal(byte[] input,
                         int inputOffset,
                         int inputLen,
                         byte[] output,
                         int outputOffset)
                  throws ShortBufferException,
                         IllegalBlockSizeException,
                         BadPaddingException

Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. Данные шифруются или дешифруются в зависимости от того, как был инициализирован этот шифр.

Первые inputLen байты в буфере input, начиная со смещения inputOffset, и любые входные байты, которые могли быть буферизованы во время предыдущей операции update, обрабатываются с применением заполнения (если запрошено). Если используется режим AEAD, такой как GCM/CCM, метка аутентификации добавляется в случае шифрования или проверяется в случае дешифрования. Результат сохраняется в буфере output, начиная со смещения outputOffset.

Если буфер output слишком мал для хранения результата, выбрасывается ShortBufferException. В этом случае повторите этот вызов с большим выходным буфером. Используйте getOutputSize для определения размера выходного буфера.

После завершения этот метод сбрасывает объект шифра до состояния, в котором он был при предыдущей инициализации с помощью вызова init. То есть, объект сбрасывается и готов для шифрования или дешифрования (в зависимости от режима операции, указанного в вызове init) дополнительных данных.

Примечание: если возникает какое-либо исключение, объект шифра может потребовать сброса перед повторным использованием.

Примечание: этот метод должен быть безопасным для копирования, что означает, что буферы input и output могут ссылаться на один и тот же массив байтов, и необработанные входные данные не перезаписываются при копировании результата в выходной буфер.

Параметры:
input - буфер ввода
inputOffset - смещение в input буфера, где начинается ввод
inputLen - длина ввода
output - буфер для результата
outputOffset - смещение в output буфере, где результат хранится
Возвращает:
количество байтов, сохранённых в output
Выбрасывает:
IllegalStateException - если этот шифр находится в неправильном состоянии (например, не был инициализирован)
IllegalBlockSizeException - если этот шифр является блочным шифром, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные.
ShortBufferException - если заданный выходной буфер слишком мал для хранения результата
BadPaddingException - если этот шифр находится в режиме дешифрования, и (раз)заполнение было запрошено, но дешифрованные данные не ограничены соответствующими байтами заполнения
AEADBadTagException - если этот шифр дешифровывает в режиме AEAD (например, GCM/CCM), и полученная метка аутентификации не совпадает с вычисленным значением

doFinal

public final int doFinal(ByteBuffer input,
                         ByteBuffer output)
                  throws ShortBufferException,
                         IllegalBlockSizeException,
                         BadPaddingException

Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. Данные шифруются или дешифруются в зависимости от того, как был инициализирован этот шифр.

Все input.remaining() байты, начиная со смещения input.position(), обрабатываются. Если используется режим AEAD, такой как GCM/CCM, метка аутентификации добавляется в случае шифрования или проверяется в случае дешифрования. Результат сохраняется в выходном буфере. По возвращении позиция входного буфера будет равна его пределу; его предел не изменится. Позиция выходного буфера будет продвинута на n, где n — значение, возвращаемое этим методом; предел выходного буфера не изменится.

Если output.remaining() байт недостаточно для хранения результата, выбрасывается ShortBufferException. В этом случае повторите этот вызов с большим выходным буфером. Используйте getOutputSize для определения размера выходного буфера.

После завершения этот метод сбрасывает объект шифра до состояния, в котором он был при предыдущей инициализации с помощью вызова init. То есть, объект сбрасывается и готов для шифрования или дешифрования (в зависимости от режима операции, указанного в вызове init) дополнительных данных.

Примечание: если возникает какое-либо исключение, объект шифра может потребовать сброса перед повторным использованием.

Примечание: этот метод должен быть безопасным для копирования, что означает, что буферы input и output могут ссылаться на один и тот же массив байтов, и необработанные входные данные не перезаписываются при копировании результата в выходной буфер.

Параметры:
input - входной ByteBuffer
output - выходной ByteBuffer
Возвращает:
количество байтов, сохранённых в output
Выбрасывает:
IllegalStateException - если этот шифр находится в неправильном состоянии (например, не был инициализирован)
IllegalArgumentException - если входной и выходной буферы — один и тот же объект
ReadOnlyBufferException - если выходной буфер только для чтения
IllegalBlockSizeException - если этот шифр является блочным шифром, заполнение не было запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные.
ShortBufferException - если в выходном буфере недостаточно места
BadPaddingException - если этот шифр находится в режиме дешифрования, и (раз)заполнение было запрошено, но дешифрованные данные не ограничены соответствующими байтами заполнения
AEADBadTagException - если этот шифр дешифровывает в режиме AEAD (например, GCM/CCM), и полученная метка аутентификации не совпадает с вычисленным значением
С:
1.5

wrap

public final byte[] wrap(Key key)
                  throws IllegalBlockSizeException,
                         InvalidKeyException

Заворачивает ключ.

Параметры:
key - ключ для заворачивания.
Возвращает:
завернутый ключ.
Выбрасывает:
IllegalStateException - если этот шифр находится в неправильном состоянии (например, не был инициализирован).
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 - если этот шифр находится в неправильном состоянии (например, не был инициализирован).
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.

Параметры:
transformation - трансформация шифра.
Возвращает:
максимальную длину ключа в битах или Integer.MAX_VALUE.
Выбрасывает:
NullPointerException - если transformation равно null.
NoSuchAlgorithmException - если transformation не является допустимой трансформацией, т.е. в формате «алгоритм» или «алгоритм/режим/заполнение».
С:
1.5

getMaxAllowedParameterSpec

public static final AlgorithmParameterSpec getMaxAllowedParameterSpec(String transformation)
                                                               throws NoSuchAlgorithmException

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

Параметры:
transformation - трансформация шифра.
Возвращает:
AlgorithmParameterSpec, содержащий максимальное значение, или null.
Выбрасывает:
NullPointerException - если transformation равно null.
NoSuchAlgorithmException - если transformation не является допустимой трансформацией, т.е. в формате «алгоритм» или «алгоритм/режим/заполнение».
С:
1.5

updateAAD

public final void updateAAD(byte[] src)

Продолжает многокомпонентное обновление дополнительных данных аутентификации (AAD).

Вызовы этого метода предоставляют AAD шифру при работе в режимах, таких как AEAD (GCM/CCM). Если этот шифр работает в режиме GCM или CCM, все AAD должны быть предоставлены перед началом операций с шифрованным текстом (через методы update и doFinal).

Параметры:
src - буфер, содержащий дополнительные данные аутентификации
Выбрасывает:
IllegalArgumentException - если массив байтов src равен null
IllegalStateException - если этот шифр находится в неправильном состоянии (например, не был инициализирован), не принимает AAD или работает в режиме GCM или CCM, и один из методов update уже был вызван для активной операции шифрования/дешифрования
UnsupportedOperationException - если соответствующий метод в CipherSpi не был переопределён реализацией
С:
1.7

updateAAD

public final void updateAAD(byte[] src,
                            int offset,
                            int len)

Продолжает многокомпонентное обновление дополнительных данных аутентификации (AAD), используя подмножество предоставленного буфера.

Вызовы этого метода предоставляют AAD шифру при работе в режимах, таких как AEAD (GCM/CCM). Если этот шифр работает в режиме GCM или CCM, все AAD должны быть предоставлены перед началом операций с шифрованным текстом (через методы update и doFinal).

Параметры:
src - буфер, содержащий AAD
offset - смещение в src, где начинается вход AAD
len - количество байтов AAD
Выбрасывает:
IllegalArgumentException - если массив байтов src равен null, или offset или length меньше 0, или сумма offset и len больше длины массива байтов src
IllegalStateException - если этот шифр находится в неправильном состоянии (например, не был инициализирован), не принимает AAD или работает в режиме GCM или CCM, и один из методов update уже был вызван для активной операции шифрования/дешифрования
UnsupportedOperationException - если соответствующий метод в CipherSpi не был переопределен реализацией
С:
1.7

updateAAD

public final void updateAAD(ByteBuffer src)

Продолжает многокомпонентное обновление дополнительных данных аутентификации (AAD).

Вызовы этого метода предоставляют AAD шифру при работе в режимах, таких как AEAD (GCM/CCM). Если этот шифр работает в режиме GCM или CCM, все AAD должны быть предоставлены перед началом операций с шифрованным текстом (через методы update и doFinal).

Все байты src.remaining() начиная со смещения src.position() обрабатываются. По завершении, позиция входного буфера будет равна его пределу; его предел не изменится.

Параметры:
src - буфер, содержащий AAD
Выбрасывает:
IllegalArgumentException - если src ByteBuffer равно null
IllegalStateException - если этот шифр находится в неправильном состоянии (например, не был инициализирован), не принимает AAD или работает в режиме GCM или CCM, и один из методов update уже был вызван для активной операции шифрования/дешифрования
UnsupportedOperationException - если соответствующий метод в CipherSpi не был переопределён реализацией
С:
1.7

© 1993, 2020, 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/11/docs/api/java.base/javax/crypto/Cipher.html

Spec-Zone .ru
спецификации, руководства, описания, API