Spec-Zone.ru › OpenJDK 27

Класс 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.

Начиная с:
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)
Оборачивает ключ.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли другой объект этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация устарела и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого объекта Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания, либо до истечения заданного промежутка реального времени.

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

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 и его инициализации.

Параметры:
opmode — режим операции этого объекта CipherSpi (одно из следующих значений: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE или UNWRAP_MODE)
key — ключ шифрования
params — параметры алгоритма
random — источник случайных данных
Исключения:
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 включительно; результат сохраняется в новом буфере.

Параметры:
input — входной буфер
inputOffset — смещение в input, с которого начинаются входные данные
inputLen — длина входных данных
Возвращает:
новый буфер с результатом или 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.

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

engineUpdate

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

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

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

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

Параметры:
input — входной ByteBuffer
output — выходной ByteBuffer
Возвращает:
количество байт, сохранённых в output
Исключения:
ShortBufferException — если в выходном буфере недостаточно места
NullPointerException — если любой из параметров имеет значение null
Начиная с:
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 может потребоваться сбросить.

Параметры:
input — входной буфер
inputOffset — смещение в input, с которого начинаются входные данные
inputLen — длина входных данных
Возвращает:
новый буфер с результатом
Исключения:
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 может потребоваться сбросить.

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

Параметры:
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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, способы обхода проблем и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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