Класс 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 для трансформации вида "алгоритм":
- Проверить, зарегистрировал ли поставщик подкласс
CipherSpiдля указанного "алгоритма".Если ответ ДА, создать экземпляр этого класса, для которого режим и схема заполнения используют значения по умолчанию (предоставленные поставщиком).
Если ответ НЕТ, выбросить исключение
NoSuchAlgorithmException.
Метод-фабрика getInstance класса-движка Cipher следует этим правилам для создания реализации поставщиком класса CipherSpi для трансформации вида "алгоритм/режим/заполнение":
- Проверить, зарегистрировал ли поставщик подкласс
CipherSpiдля заданной трансформации "алгоритм/режим/заполнение".Если ответ ДА, создать экземпляр.
Если ответ НЕТ, перейти к следующему шагу.
- Проверить, зарегистрировал ли поставщик подкласс
CipherSpiдля подтрансформации "алгоритм/режим".Если ответ ДА, создать экземпляр и вызвать
engineSetPadding(padding)для нового экземпляра.Если ответ НЕТ, перейти к следующему шагу.
- Проверить, зарегистрировал ли поставщик подкласс
CipherSpiдля подтрансформации "алгоритм//заполнение" (обратите внимание на двойные слэши).Если ответ ДА, создать экземпляр и вызвать
engineSetMode(mode)для нового экземпляра.Если ответ НЕТ, перейти к следующему шагу.
- Проверить, зарегистрировал ли поставщик подкласс
CipherSpiдля подтрансформации "алгоритм".Если ответ ДА, создать экземпляр и вызвать
engineSetMode(mode)иengineSetPadding(padding)для нового экземпляра.Если ответ НЕТ, выбросить исключение
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) | Возвращает длину в байтах, необходимую для буфера вывода, чтобы содержать результат следующей операции |
protected abstract AlgorithmParameters | engineGetParameters() | Возвращает параметры, используемые с этим шифром. |
protected abstract void | engineInit(int opmode,
Key key,
AlgorithmParameters params,
SecureRandom random) | Инициализирует этот шифр ключом, набором параметров алгоритма и источником случайных чисел. |
protected abstract void | engineInit(int opmode,
Key key,
SecureRandom random) | Инициализирует этот шифр ключом и источником случайных чисел. |
protected abstract void | engineInit(int opmode,
Key key,
AlgorithmParameterSpec params,
SecureRandom random) | Инициализирует этот шифр ключом, набором параметров алгоритма и источником случайных чисел. |
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) | Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных. |
protected abstract int | engineUpdate(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset) | Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных. |
protected int | engineUpdate(ByteBuffer input,
ByteBuffer output) | Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другой фрагмент данных. |
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, если этот шифр не использует никаких параметров.
engineInit
protected abstract void engineInit(int opmode,
Key key,
SecureRandom random)
throws InvalidKeyException Инициализирует этот шифр ключом и источником случайных чисел.
Шифр инициализируется для одной из следующих четырех операций: шифрование, дешифрование, заворачивание ключа или разворачивание ключа, в зависимости от значения opmode.
Если этот шифр требует каких-либо параметров алгоритма, которые не могут быть получены из заданного key, базовая реализация шифра должна генерировать необходимые параметры сама (используя значения по умолчанию или случайные значения, зависящие от поставщика), если она инициализируется для шифрования или заворачивания ключа, и вызывать InvalidKeyException, если она инициализируется для дешифрования или разворачивания ключа. Сгенерированные параметры можно получить с помощью engineGetParameters или engineGetIV (если параметр является IV).
Если этот шифр требует параметров алгоритма, которые не могут быть получены из входных параметров, и нет разумных значений по умолчанию, зависящих от поставщика, инициализация обязательно завершится неудачей.
Если этот шифр (включая его базовую схему обратной связи или дополнения) требует каких-либо случайных байтов (например, для генерации параметров), он получит их от random.
Обратите внимание, что при инициализации объекта Cipher он теряет все ранее полученное состояние. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.
- Параметры:
-
opmode- режим работы этого шифра (это один из следующих: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 Инициализирует этот шифр ключом, набором параметров алгоритма и источником случайных чисел.
Шифр инициализируется для одной из следующих четырех операций: шифрование, дешифрование, заворачивание ключа или разворачивание ключа, в зависимости от значения opmode.
Если этот шифр требует каких-либо параметров алгоритма, и params равно null, базовая реализация шифра должна генерировать необходимые параметры сама (используя значения по умолчанию или случайные значения, зависящие от поставщика), если она инициализируется для шифрования или заворачивания ключа, и вызывать InvalidAlgorithmParameterException, если она инициализируется для дешифрования или разворачивания ключа. Сгенерированные параметры можно получить с помощью engineGetParameters или engineGetIV (если параметр является IV).
Если этот шифр требует параметров алгоритма, которые не могут быть получены из входных параметров, и нет разумных значений по умолчанию, зависящих от поставщика, инициализация обязательно завершится неудачей.
Если этот шифр (включая его базовую схему обратной связи или дополнения) требует каких-либо случайных байтов (например, для генерации параметров), он получит их от random.
Обратите внимание, что при инициализации объекта Cipher он теряет все ранее полученное состояние. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.
- Параметры:
-
opmode- режим работы этого шифра (это один из следующих:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
key- ключ шифрования -
params- параметры алгоритма -
random- источник случайных чисел - Исключения:
-
InvalidKeyException- если данный ключ не подходит для инициализации этого шифра -
InvalidAlgorithmParameterException- если заданные параметры алгоритма не подходят для этого шифра, или если этот шифр требует параметров алгоритма, иparamsравно null. -
UnsupportedOperationException- еслиopmodeявляетсяWRAP_MODEилиUNWRAP_MODEне реализован шифром.
engineInit
protected abstract void engineInit(int opmode,
Key key,
AlgorithmParameters params,
SecureRandom random)
throws InvalidKeyException,
InvalidAlgorithmParameterException Инициализирует этот шифр ключом, набором параметров алгоритма и источником случайных чисел.
Шифр инициализируется для одной из следующих четырех операций: шифрование, дешифрование, заворачивание ключа или разворачивание ключа, в зависимости от значения opmode.
Если этот шифр требует каких-либо параметров алгоритма, и params равно null, базовая реализация шифра должна генерировать необходимые параметры сама (используя значения по умолчанию или случайные значения, зависящие от поставщика), если она инициализируется для шифрования или заворачивания ключа, и вызывать InvalidAlgorithmParameterException, если она инициализируется для дешифрования или разворачивания ключа. Сгенерированные параметры можно получить с помощью engineGetParameters или engineGetIV (если параметр является IV).
Если этот шифр требует параметров алгоритма, которые не могут быть получены из входных параметров, и нет разумных значений по умолчанию, зависящих от поставщика, инициализация обязательно завершится неудачей.
Если этот шифр (включая его базовую схему обратной связи или дополнения) требует каких-либо случайных байтов (например, для генерации параметров), он получит их от random.
Обратите внимание, что при инициализации объекта Cipher он теряет все ранее полученное состояние. Другими словами, инициализация Cipher эквивалентна созданию нового экземпляра этого Cipher и его инициализации.
- Параметры:
-
opmode- режим работы этого шифра (это один из следующих:ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODEилиUNWRAP_MODE) -
key- ключ шифрования -
params- параметры алгоритма -
random- источник случайных чисел - Исключения:
-
InvalidKeyException- если данный ключ не подходит для инициализации этого шифра -
InvalidAlgorithmParameterException- если заданные параметры алгоритма не подходят для этого шифра, или если этот шифр требует параметров алгоритма, иparamsравно null. -
UnsupportedOperationException- еслиopmodeявляетсяWRAP_MODEилиUNWRAP_MODEне реализован шифром.
engineUpdate
protected abstract byte[] engineUpdate(byte[] input,
int inputOffset,
int inputLen) Продолжает многочастную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другую часть данных.
Первые 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 Продолжает многочастную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая другую часть данных.
Первые 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 Продолжает многоэтапную операцию шифрования или дешифрования (в зависимости от того, как был инициализирован этот шифр), обрабатывая ещё один фрагмент данных.
Все input.remaining() байты, начиная со смещения input.position(), обрабатываются. Результат сохраняется в буфере вывода. По завершении метод вернёт позицию буфера ввода, равную его пределу; его предел не изменится. Позиция буфера вывода будет увеличена на n, где n — значение, возвращаемое этим методом; предел буфера вывода не изменится.
Если output.remaining() байтов недостаточно для хранения результата, выбрасывается ShortBufferException.
Подклассы должны рассмотреть возможность переопределения этого метода, если они могут обрабатывать ByteBuffers более эффективно, чем массивы байтов.
- Параметры:
-
input- буфер ввода ByteBuffer -
output- буфер вывода ByteByffer - Возвращает:
- количество байтов, сохранённых в
output - Выбрасывает:
-
ShortBufferException- если в буфере вывода недостаточно места -
NullPointerException- если какой-либо параметрnull - С:
- 1.5
engineDoFinal
protected abstract byte[] engineDoFinal(byte[] input,
int inputOffset,
int inputLen)
throws IllegalBlockSizeException,
BadPaddingException Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. Данные шифруются или дешифруются в зависимости от того, как был инициализирован этот шифр.
Первые inputLen байтов в буфере input, начиная со смещения inputOffset, и любые байты ввода, которые могли быть буферизированы во время предыдущей операции update, обрабатываются с применением заполнения (если оно запрошено). Если используется режим AEAD, например GCM/CCM, тег аутентификации добавляется при шифровании или проверяется при дешифровании. Результат сохраняется в новом буфере.
По завершении этот метод сбрасывает объект шифра до состояния, в котором он находился при предыдущей инициализации с помощью вызова engineInit. То есть объект сброшен и готов к шифрованию или дешифрованию (в зависимости от режима операции, указанного в вызове engineInit) больше данных.
Примечание: если возникает исключение, возможно, объект шифра необходимо сбросить перед повторным использованием.
- Параметры:
-
input- буфер ввода -
inputOffset- смещение вinput, где начинается ввод -
inputLen- длина ввода - Возвращает:
- новый буфер с результатом
- Выбрасывает:
-
IllegalBlockSizeException- если этот шифр является блочным шифром, заполнение не запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные. -
BadPaddingException- если этот шифр находится в режиме дешифрования и (раз)заполнение запрошено, но дешифрованные данные не ограничены соответствующими байтами заполнения -
AEADBadTagException- если этот шифр дешифрует в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не совпадает с вычисленным значением
engineDoFinal
protected abstract int engineDoFinal(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws ShortBufferException,
IllegalBlockSizeException,
BadPaddingException Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. Данные шифруются или дешифруются в зависимости от того, как был инициализирован этот шифр.
Первые inputLen байтов в буфере input, начиная со смещения inputOffset, и любые байты ввода, которые могли быть буферизированы во время предыдущей операции update, обрабатываются с применением заполнения (если оно запрошено). Если используется режим AEAD, например GCM/CCM, тег аутентификации добавляется при шифровании или проверяется при дешифровании. Результат сохраняется в буфере output, начиная со смещения outputOffset.
Если буфер output слишком мал для хранения результата, выбрасывается ShortBufferException.
По завершении этот метод сбрасывает объект шифра до состояния, в котором он находился при предыдущей инициализации с помощью вызова engineInit. То есть объект сброшен и готов к шифрованию или дешифрованию (в зависимости от режима операции, указанного в вызове engineInit) больше данных.
Примечание: если возникает исключение, возможно, объект шифра необходимо сбросить перед повторным использованием.
- Параметры:
-
input- буфер ввода -
inputOffset- смещение вinput, где начинается ввод -
inputLen- длина ввода -
output- буфер для результата -
outputOffset- смещение вoutput, где хранится результат - Возвращает:
- количество байтов, сохранённых в
output - Выбрасывает:
-
IllegalBlockSizeException- если этот шифр является блочным шифром, заполнение не запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные. -
ShortBufferException- если предоставленный буфер вывода слишком мал для хранения результата -
BadPaddingException- если этот шифр дешифрует в режиме AEAD (например, GCM/CCM) и полученный тег аутентификации не соответствует вычисленному значению -
AEADBadTagException- если этот шифр дешифрует в режиме AEAD (например, GCM/CCM), и полученный тег аутентификации не соответствует вычисленному значению
engineDoFinal
protected int engineDoFinal(ByteBuffer input,
ByteBuffer output)
throws ShortBufferException,
IllegalBlockSizeException,
BadPaddingException Шифрует или дешифрует данные в одноэтапной операции или завершает многоэтапную операцию. Данные шифруются или дешифруются в зависимости от того, как был инициализирован этот шифр.
Все input.remaining() байты, начиная со смещения input.position(), обрабатываются. Если используется режим AEAD, например GCM/CCM, тег аутентификации добавляется при шифровании или проверяется при дешифровании. Результат сохраняется в буфере вывода. По завершении метод вернёт позицию буфера ввода, равную его пределу; его предел не изменится. Позиция буфера вывода будет увеличена на n, где n — значение, возвращаемое этим методом; предел буфера вывода не изменится.
Если output.remaining() байтов недостаточно для хранения результата, выбрасывается ShortBufferException.
По завершении этот метод сбрасывает объект шифра до состояния, в котором он находился при предыдущей инициализации с помощью вызова engineInit. То есть объект сброшен и готов к шифрованию или дешифрованию (в зависимости от режима операции, указанного в вызове engineInit) больше данных.
Примечание: если возникает исключение, возможно, объект шифра необходимо сбросить перед повторным использованием.
Подклассы должны рассмотреть возможность переопределения этого метода, если они могут обрабатывать ByteBuffers более эффективно, чем массивы байтов.
- Параметры:
-
input- буфер ввода ByteBuffer -
output- буфер вывода ByteByffer - Возвращает:
- количество байтов, сохранённых в
output - Выбрасывает:
-
IllegalBlockSizeException- если этот шифр является блочным шифром, заполнение не запрошено (только в режиме шифрования), и общая длина входных данных, обработанных этим шифром, не кратна размеру блока; или если этот алгоритм шифрования не может обработать предоставленные входные данные. -
ShortBufferException- если в буфере вывода недостаточно места -
BadPaddingException- если этот шифр дешифрует в режиме AEAD (например, GCM/CCM) и полученный тег аутентификации не соответствует вычисленному значению -
AEADBadTagException- если этот шифр дешифрует в режиме 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- если этот шифр находится в неправильном состоянии (например, не был инициализирован), не принимает 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- если этот шифр находится в неправильном состоянии (например, не был инициализирован), не принимает AAD или если работает в режиме GCM или CCM, и один из методовupdateуже был вызван для активной операции шифрования/расшифровки. -
UnsupportedOperationException- если этот метод не переопределен реализацией. - С:
- 1.7
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/crypto/CipherSpi.html