Spec-Zone.ru › OpenJDK 24

Класс CipherSpi

java.lang.Object
javax.crypto.CipherSpi
public abstract class CipherSpi extends Object
Этот класс определяет интерфейс поставщика сервисов (SPI) для класса Cipher. Все абстрактные методы в этом классе должны быть реализованы каждым поставщиком криптографических сервисов, желающим предоставить реализацию определенного алгоритма шифрования.

Для создания экземпляра Cipher, который инкапсулирует экземпляр этого класса CipherSpi, приложение вызывает один из методов-фабрик getInstance класса движка Cipher и указывает необходимую трансформацию. Приложение также может указать имя поставщика.

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

Трансформация имеет вид:

  • "алгоритм/режим/заполнение" или
  • "алгоритм"

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

     Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
 

Поставщик может предоставить отдельный класс для каждой комбинации алгоритм/режим/заполнение или выбрать более универсальные классы, представляющие подтрансформации, соответствующие алгоритму или алгоритм/режим или алгоритм//заполнение (обратите внимание на двойной слэш), в этом случае запрашиваемый режим и/или схема заполнения автоматически устанавливаются методами getInstance класса Cipher, которые вызывают методы engineSetMode и engineSetPadding подкласса поставщика класса CipherSpi.

Свойство Cipher в главном классе поставщика может иметь один из следующих форматов:

  •      // provider's subclass of "CipherSpi" implements "algName" with
         // pluggable mode and padding
         Cipher.algName
     
  •      // provider's subclass of "CipherSpi" implements "algName" in the
         // specified "mode", with pluggable padding
         Cipher.algName/mode
     
  •      // provider's subclass of "CipherSpi" implements "algName" with the
         // specified "padding", with pluggable mode
         Cipher.algName//padding
     
  •      // provider's subclass of "CipherSpi" implements "algName" with the
         // specified "mode" and "padding"
         Cipher.algName/mode/padding
     

Например, поставщик может предоставить подкласс CipherSpi, реализующий AES/ECB/PKCS5Padding, другой — AES/CBC/PKCS5Padding, ещё один — AES/CFB/PKCS5Padding и так далее для AES/OFB/PKCS5Padding. У этого поставщика в главном классе будут следующие свойства Cipher:

  •      Cipher.AES/ECB/PKCS5Padding
     
  •      Cipher.AES/CBC/PKCS5Padding
     
  •      Cipher.AES/CFB/PKCS5Padding
     
  •      Cipher.AES/OFB/PKCS5Padding
     

Другой поставщик может реализовать класс для каждого из указанных режимов (т.е. один класс для ECB, один для CBC, один для CFB и один для OFB), один класс для PKCS5Padding и общий класс AES, являющийся подклассом CipherSpi. У этого поставщика в главном классе будут следующие свойства Cipher:

  •      Cipher.AES
     

Метод-фабрика getInstance класса движка Cipher следует этим правилам для создания реализации поставщика класса CipherSpi для преобразования вида «алгоритм»:

  1. Проверяет, зарегистрирован ли поставщиком подкласс CipherSpi для указанного «алгоритма».

    Если ответ ДА, создаёт экземпляр этого класса, для которого режим работы и схема заполнения используют значения по умолчанию, предоставленные поставщиком.

    Если ответ НЕТ, выбрасывает исключение NoSuchAlgorithmException.

Метод-фабрика getInstance класса движка Cipher следует этим правилам для создания реализации поставщика класса CipherSpi для преобразования вида «алгоритм/режим/заполнение»:

  1. Проверяет, зарегистрирован ли поставщиком подкласс CipherSpi для указанного преобразования «алгоритм/режим/заполнение».

    Если ответ ДА, создаёт его экземпляр.

    Если ответ НЕТ, переходит к следующему шагу.

  2. Проверяет, зарегистрирован ли поставщиком подкласс CipherSpi для подтрансформации «алгоритм/режим».

    Если ответ ДА, создаёт его экземпляр и вызывает метод engineSetPadding(<i>padding</i>) для нового экземпляра.

    Если ответ НЕТ, переходит к следующему шагу.

  3. Проверяет, зарегистрирован ли поставщиком подкласс CipherSpi для подтрансформации «алгоритм//заполнение» (обратите внимание на двойной слэш).

    Если ответ ДА, создаёт его экземпляр и вызывает метод engineSetMode(<i>mode</i>) для нового экземпляра.

    Если ответ НЕТ, переходит к следующему шагу.

  4. Проверяет, зарегистрирован ли поставщиком подкласс CipherSpi для подтрансформации «алгоритм».

    Если ответ ДА, создаёт его экземпляр и вызывает методы engineSetMode(<i>mode</i>) и engineSetPadding(<i>padding</i>) для нового экземпляра.

    Если ответ НЕТ, выбрасывает исключение NoSuchAlgorithmException.

Since:
1.4
См. также:
  • KeyGenerator
  • SecretKey

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

Конструктор Описание
CipherSpi()
Конструктор для вызова подклассами.

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

Модификатор и тип Метод Описание
protected abstract byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen)
Шифрует или расшифровывает данные в одноэтапной операции или завершает многоэтапную операцию.
protected abstract int engineDoFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
Шифрует или расшифровывает данные в одноэтапной операции или завершает многоэтапную операцию.
protected int engineDoFinal(ByteBuffer input, ByteBuffer output)
Шифрует или расшифровывает данные в одноэтапной операции или завершает многоэтапную операцию.
protected abstract int engineGetBlockSize()
Возвращает размер блока (в байтах).
protected abstract byte[] engineGetIV()
Возвращает вектор инициализации (IV) в новом буфере.
protected int engineGetKeySize(Key key)
Возвращает размер ключа данного объекта ключа в битах.
protected abstract int engineGetOutputSize(int inputLen)
Возвращает длину в байтах, необходимую для буфера вывода, чтобы вместить результат следующей операции update или doFinal, учитывая длину входных данных inputLen (в байтах).
protected abstract AlgorithmParameters engineGetParameters()
Возвращает параметры, используемые с этим шифром.
protected abstract void engineInit(int opmode, Key key, AlgorithmParameters params, SecureRandom random)
Инициализирует этот объект CipherSpi ключом, набором параметров алгоритма и источником случайных чисел.
protected abstract void engineInit(int opmode, Key key, SecureRandom random)
Инициализирует этот объект CipherSpi ключом и источником случайных чисел.
protected abstract void engineInit(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random)
Инициализирует этот объект CipherSpi ключом, набором параметров алгоритма и источником случайных чисел.
protected abstract void engineSetMode(String mode)
Устанавливает режим работы этого шифра.
protected abstract void engineSetPadding(String padding)
Устанавливает механизм заполнения этого шифра.
protected Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType)
Расфасовывает ранее упакованный ключ.
protected abstract byte[] engineUpdate(byte[] input, int inputOffset, int inputLen)
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект CipherSpi), обрабатывая другую часть данных.
protected abstract int engineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект CipherSpi), обрабатывая другую часть данных.
protected int engineUpdate(ByteBuffer input, ByteBuffer output)
Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект CipherSpi), обрабатывая другую часть данных.
protected void engineUpdateAAD(byte[] src, int offset, int len)
Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD), используя подмножество предоставленного буфера.
protected void engineUpdateAAD(ByteBuffer src)
Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD).
protected byte[] engineWrap(Key key)
Упаковывает ключ.

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

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

Подробное описание конструкторов

CipherSpi

public CipherSpi()
Конструктор для вызова подклассами.

Подробное описание методов

engineSetMode

protected abstract void engineSetMode(String mode) throws NoSuchAlgorithmException
Устанавливает режим шифрования.
Параметры:
mode - режим шифрования
Исключения:
NoSuchAlgorithmException - если запрашиваемый режим шифрования не существует

engineSetPadding

protected abstract void engineSetPadding(String padding) throws NoSuchPaddingException
Устанавливает механизм дополнения.
Параметры:
padding - механизм дополнения
Исключения:
NoSuchPaddingException - если запрашиваемый механизм дополнения не существует

engineGetBlockSize

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

engineGetOutputSize

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

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

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

Параметры:
inputLen - длина входных данных (в байтах)
Возвращает:
требуемый размер буфера вывода (в байтах)

engineGetIV

protected abstract byte[] engineGetIV()
Возвращает вектор инициализации (IV) в новом буфере.

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

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

engineGetParameters

protected abstract AlgorithmParameters engineGetParameters()
Возвращает параметры, используемые с этим шифром.

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

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

engineInit

protected abstract void engineInit(int opmode, Key key, SecureRandom random) throws InvalidKeyException
Инициализирует этот объект CipherSpi ключом и источником случайных чисел.

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

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

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

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

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

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

engineInit

protected abstract void engineInit(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
Инициализирует этот объект CipherSpi ключом, набором параметров алгоритма и источником случайных чисел.

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

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

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

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

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

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

engineInit

protected abstract void engineInit(int opmode, Key key, AlgorithmParameters params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
Инициализирует этот CipherSpi объект с ключом, набором параметров алгоритма и источником случайности.

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

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

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

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

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

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

engineUpdate

protected abstract byte[] engineUpdate(byte[] input, int inputOffset, int inputLen)
Продолжает многочастотную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект CipherSpi), обрабатывая другой фрагмент данных.

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

Parameters:
input - буфер входных данных
inputOffset - смещение в input, где начинается входной поток
inputLen - длина входных данных
Returns:
новый буфер с результатом или null, если шифр — блочный шифр, а входные данные недостаточно длинны для формирования нового блока

engineUpdate

protected abstract int engineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException
Продолжает многочастотную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект CipherSpi), обрабатывая другой фрагмент данных.

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

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

Parameters:
input - буфер входных данных
inputOffset - смещение в input, где начинается входной поток
inputLen - длина входных данных
output - буфер для результата
outputOffset - смещение в output, где хранится результат
Returns:
количество байтов, сохранённых в output
Throws:
ShortBufferException - если предоставленный буфер вывода слишком мал для хранения результата

engineUpdate

protected int engineUpdate(ByteBuffer input, ByteBuffer output) throws ShortBufferException
Продолжает многочастотную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот объект CipherSpi), обрабатывая другой фрагмент данных.

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

Если output.remaining() байтов недостаточно для хранения результата, будет выброшено исключение ShortBufferException.

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

Parameters:
input - входной ByteBuffer
output - выходной ByteBuffer
Returns:
количество байтов, сохранённых в output
Throws:
ShortBufferException - если в выходном буфере недостаточно места
NullPointerException - если любой из параметров является null
Since:
1.5

engineDoFinal

protected abstract byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException, BadPaddingException
Шифрует или дешифрует данные в одночастотной операции или завершает многочастотную операцию. Данные шифруются или дешифруются в зависимости от того, как был инициализирован этот объект CipherSpi.

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

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

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

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

engineDoFinal

protected abstract int engineDoFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
Шифрует или расшифровывает данные в одноэтапной операции или завершает многоэтапную операцию. Данные шифруются или расшифровываются в зависимости от того, как был инициализирован этот CipherSpi объект.

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

Если буфер output слишком мал для хранения результата, генерируется исключение ShortBufferException.

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

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

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

engineDoFinal

protected int engineDoFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
Шифрует или расшифровывает данные в одноэтапной операции или завершает многоэтапную операцию. Данные шифруются или расшифровываются в зависимости от того, как был инициализирован этот CipherSpi объект.

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

Если output.remaining() байтов недостаточно для хранения результата, генерируется исключение ShortBufferException.

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

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

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

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

engineWrap

protected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException
Заворачивание ключа.

Этот конкретный метод был добавлен в этот ранее определённый абстрактный класс. (Для обратной совместимости он не может быть абстрактным.) Он может быть переопределен поставщиком для обертывания ключа. Такое переопределение ожидается, что будет выброшено исключение IllegalBlockSizeException или InvalidKeyException (в указанных обстоятельствах), если заданный ключ не может быть обернут. Если этот метод не переопределен, он всегда выбросит исключение UnsupportedOperationException.

Параметры:
key - ключ для обертывания
Возвращает:
обернутый ключ
Выбрасывает:
IllegalBlockSizeException - если этот шифр является блочным шифром, не запрошено заполнение, и длина кодирования ключа для обертывания не кратна размеру блока
InvalidKeyException - если невозможно или небезопасно обернуть ключ с помощью этого шифра (например, защищённый аппаратный ключ передаётся программному шифру)
UnsupportedOperationException - если этот метод не поддерживается

engineUnwrap

protected Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException
Разворачивание ранее обернутого ключа.

Этот конкретный метод был добавлен в этот ранее определённый абстрактный класс. (Для обратной совместимости он не может быть абстрактным.) Он может быть переопределен поставщиком для разворачивания ранее обернутого ключа. Такое переопределение ожидается, что будет выброшено исключение InvalidKeyException, если заданный обернутый ключ не может быть развернут. Если этот метод не переопределен, он всегда выбросит исключение UnsupportedOperationException.

Параметры:
wrappedKey - ключ для разворачивания
wrappedKeyAlgorithm - алгоритм, связанный с обернутым ключом
wrappedKeyType - тип обернутого ключа. Это один из SECRET_KEY, PRIVATE_KEY или PUBLIC_KEY.
Возвращает:
развёрнутый ключ
Выбрасывает:
NoSuchAlgorithmException - если ни один из установленных поставщиков не может создать ключи типа wrappedKeyType для wrappedKeyAlgorithm
InvalidKeyException - если wrappedKey не представляет обернутый ключ типа wrappedKeyType для wrappedKeyAlgorithm
UnsupportedOperationException - если этот метод не поддерживается

engineGetKeySize

protected int engineGetKeySize(Key key) throws InvalidKeyException
Возвращает размер ключа заданного объекта ключа в битах.

Этот конкретный метод был добавлен в этот ранее определённый абстрактный класс. Он выбросит исключение UnsupportedOperationException, если не переопределён поставщиком.

Параметры:
key - объект ключа
Возвращает:
размер ключа заданного объекта ключа
Выбрасывает:
InvalidKeyException - если key некорректен

engineUpdateAAD

protected void engineUpdateAAD(byte[] src, int offset, int len)
Продолжает многоэтапное обновление дополнительных данных аутентификации (AAD), используя подмножество предоставленного буфера.

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

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

engineUpdateAAD

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

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

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

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

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/javax/crypto/CipherSpi.html

Spec-Zone.ru

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