Класс CipherSpi
public abstract class CipherSpi extends Object
Cipher. Все абстрактные методы этого класса должны быть реализованы каждым поставщиком криптографических служб, который желает предоставить реализацию определённого алгоритма шифрования. Чтобы создать экземпляр Cipher, инкапсулирующий экземпляр этого класса CipherSpi, приложение вызывает один из фабричных методов getInstance класса ядра Cipher и указывает запрошенное преобразование. При необходимости приложение также может указать имя поставщика.
Преобразование — это строка, описывающая операцию (или набор операций), выполняемую над заданными входными данными для получения выходных данных. Преобразование всегда включает имя криптографического алгоритма (например, AES), за которым может следовать режим обратной связи и схема заполнения.
Преобразование имеет следующий формат:
- "algorithm/mode/padding" или
- "algorithm"
(в последнем случае используются заданные поставщиком значения режима и схемы заполнения по умолчанию). Например, допустимо следующее преобразование:
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
Поставщик может предоставить отдельный класс для каждой комбинации алгоритм/режим/заполнение либо выбрать более универсальные классы, представляющие подпреобразования, соответствующие алгоритму, алгоритму/режиму или алгоритму//заполнению (обратите внимание на двойную косую черту). В последнем случае запрошенный режим и/или заполнение задаются автоматически методами getInstance класса Cipher, которые вызывают методы engineSetMode и engineSetPadding подкласса CipherSpi, предоставленного поставщиком.
Свойство Cipher в главном классе поставщика может иметь один из следующих форматов:
-
// provider's subclass of "CipherSpi" implements "algName" with // pluggable mode and paddingCipher.algName -
// provider's subclass of "CipherSpi" implements "algName" in the // specified "mode", with pluggable paddingCipher.algName/mode -
// provider's subclass of "CipherSpi" implements "algName" with the // specified "padding", with pluggable modeCipher.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 поставщика при преобразовании формата "algorithm":
- Проверьте, зарегистрировал ли поставщик подкласс
CipherSpiдля указанного "algorithm".Если ответ ДА, создайте экземпляр этого класса, используя значения режима и схемы заполнения по умолчанию (предоставленные поставщиком).
Если ответ НЕТ, выбросьте исключение
NoSuchAlgorithmException.
Фабричный метод getInstance класса ядра Cipher следует этим правилам для создания экземпляра реализации CipherSpi поставщика при преобразовании формата "algorithm/mode/padding":
- Проверьте, зарегистрировал ли поставщик подкласс
CipherSpiдля указанного преобразования "algorithm/mode/padding".Если ответ ДА, создайте его экземпляр.
Если ответ НЕТ, перейдите к следующему шагу.
- Проверьте, зарегистрировал ли поставщик подкласс
CipherSpiдля подпреобразования "algorithm/mode".Если ответ ДА, создайте его экземпляр и вызовите
engineSetPadding(<i>padding</i>)для нового экземпляра.Если ответ НЕТ, перейдите к следующему шагу.
- Проверьте, зарегистрировал ли поставщик подкласс
CipherSpiдля подпреобразования "algorithm//padding" (обратите внимание на двойную косую черту).Если ответ ДА, создайте его экземпляр и вызовите
engineSetMode(<i>mode</i>)для нового экземпляра.Если ответ НЕТ, перейдите к следующему шагу.
- Проверьте, зарегистрировал ли поставщик подкласс
CipherSpiдля подпреобразования "algorithm".Если ответ ДА, создайте его экземпляр и вызовите
engineSetMode(<i>mode</i>)иengineSetPadding(<i>padding</i>)для нового экземпляра.Если ответ НЕТ, выбросьте исключение
NoSuchAlgorithmException.
- Начиная с:
- 1.4
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
CipherSpi() |
Конструктор для вызова из подклассов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected abstract byte[] |
engineDoFinal |
Шифрует или расшифровывает данные за одну операцию либо завершает операцию, состоящую из нескольких частей. |
protected abstract int |
engineDoFinal |
Шифрует или расшифровывает данные за одну операцию либо завершает операцию, состоящую из нескольких частей. |
protected int |
engineDoFinal |
Шифрует или расшифровывает данные за одну операцию либо завершает операцию, состоящую из нескольких частей. |
protected abstract int |
engineGetBlockSize() |
Возвращает размер блока (в байтах). |
protected abstract byte[] |
engineGetIV() |
Возвращает в новом буфере вектор инициализации (IV). |
protected int |
engineGetKeySize |
Возвращает размер ключа в битах для заданного объекта ключа. |
protected abstract int |
engineGetOutputSize |
Возвращает длину в байтах, необходимую выходному буферу для хранения результата следующей операции update или doFinal при заданной длине входных данных inputLen (в байтах). |
protected abstract AlgorithmParameters |
engineGetParameters() |
Возвращает параметры, используемые этим шифром. |
protected abstract void |
engineInit |
Инициализирует этот объект CipherSpi ключом, набором параметров алгоритма и источником случайных данных. |
protected abstract void |
engineInit |
Инициализирует этот объект CipherSpi ключом и источником случайных данных. |
protected abstract void |
engineInit |
Инициализирует этот объект CipherSpi ключом, набором параметров алгоритма и источником случайных данных. |
protected abstract void |
engineSetMode |
Устанавливает режим этого шифра. |
protected abstract void |
engineSetPadding |
Устанавливает механизм заполнения для этого шифра. |
protected Key |
engineUnwrap |
Распаковывает ранее упакованный ключ. |
protected abstract byte[] |
engineUpdate |
Продолжает операцию шифрования или расшифрования, состоящую из нескольких частей (в зависимости от способа инициализации этого объекта CipherSpi), обрабатывая следующую часть данных. |
protected abstract int |
engineUpdate |
Продолжает операцию шифрования или расшифрования, состоящую из нескольких частей (в зависимости от способа инициализации этого объекта CipherSpi), обрабатывая следующую часть данных. |
protected int |
engineUpdate |
Продолжает операцию шифрования или расшифрования, состоящую из нескольких частей (в зависимости от способа инициализации этого объекта CipherSpi), обрабатывая следующую часть данных. |
protected void |
engineUpdateAAD |
Продолжает обновление дополнительных данных аутентификации (AAD), состоящее из нескольких частей, используя подмножество предоставленного буфера. |
protected void |
engineUpdateAAD |
Продолжает обновление дополнительных данных аутентификации (AAD), состоящее из нескольких частей. |
protected byte[] |
engineWrap |
Упаковывает ключ. |
Подробное описание конструкторов
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 формируется из предоставленной пользователем парольной фразы.
- Возвращает:
- вектор инициализации в новом буфере или
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 при работе в таких режимах, как 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 при работе в таких режимах, как 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/crypto/CipherSpi.html