- java.lang.Object
-
- javax.crypto.CipherSpi
-
public abstract class CipherSpiextends Object
此类定义Cipher
类的 ( SPI )。 此类中的所有抽象方法必须由希望提供特定密码算法实现的每个加密服务提供者实现。为了创建
Cipher
的实例,该实例封装了此CipherSpi
类的实例,应用程序将调用Cipher
引擎类的getInstance
工厂方法之一并指定请求的转换 。 可选地,应用程序还可以指定提供者的名称。转换是一个字符串,它描述要对给定输入执行的操作(或操作集),以产生一些输出。 转换总是包括加密算法的名称(例如, 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/PKCS5PaddingCipher.
AES/CBC/PKCS5PaddingCipher.
AES/CFB/PKCS5PaddingCipher.
AES/OFB/PKCS5Padding
另一个提供者可以为上述每种模式实现一个类(即,一个用于ECB ,一个用于CBC ,一个用于CFB ,一个用于OFB ),一个类用于PKCS5Padding ,以及一个通用AES类,其子类来自
CipherSpi
。 该提供程序在其主类中具有以下Cipher
属性:Cipher.
AES
Cipher
引擎类的getInstance
工厂方法遵循这些规则,以实例化提供程序的CipherSpi
实现,以转换“ algorithm ”形式:- 检查提供程序是否已为指定的“ 算法 ”注册了
CipherSpi
的子类。如果答案为YES,则实例化此类,其中使用了模式和填充方案的默认值(由提供者提供)。
如果答案为否,则抛出
NoSuchAlgorithmException
异常。
Cipher
引擎类的getInstance
工厂方法遵循这些规则,以实例化提供程序的CipherSpi
实现,以转换“ algorithm / mode / padding ”形式:- 检查提供程序是否已为指定的“ algorithm / mode / padding ”转换注册了
CipherSpi
的子类。如果答案为是,则将其实例化。
如果答案为否,请转到下一步。
- 检查提供者是否已为子转换“ 算法/模式 ”注册了子类
CipherSpi
。如果答案为YES,则将其实例化,并在新实例上调用
engineSetPadding(padding)
。如果答案为否,请转到下一步。
- 检查提供程序是否已为子转换“ algorithm // padding ”注册了子类
CipherSpi
(请注意双斜杠)。如果答案为YES,则将其实例化,并在新实例上调用
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)
返回输出缓冲区为了保存下一个update
或doFinal
操作的结果所需的长度(以字节为单位),给定输入长度为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)
包裹一把钥匙。
-
-
-
方法详细信息
-
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源自用户提供的密码。
- 结果
- 新缓冲区中的初始化向量,如果基础算法不使用IV,或者尚未设置IV,则为null。
-
engineGetParameters
protected abstract AlgorithmParameters engineGetParameters()
返回此密码使用的参数。返回的参数可能与用于初始化此密码的参数相同,或者可能包含底层密码实现使用的默认和随机参数值的组合(如果此密码需要算法参数但未使用任何语法初始化)。
- 结果
- 此密码使用的参数,如果此密码不使用任何参数,则返回null。
-
engineInit
protected abstract void engineInit(int opmode, Key key, SecureRandom random) throws InvalidKeyException
使用密钥和随机源初始化此密码。密码初始化为以下四种操作之一:加密,解密,密钥包装或密钥解包,具体取决于
opmode
的值。如果此密码需要任何无法从给定的
key
派生的算法参数,则基础密码实现应该自行生成所需的参数(使用特定于提供程序的默认值或随机值),如果它正在初始化以进行加密或密钥包装,并且如果正在初始化解密或密钥解InvalidKeyException
则引发InvalidKeyException
。 可以使用engineGetParameters
或engineGetIV
(如果参数是IV)检索生成的参数。如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供程序的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将从
random
获得它们。请注意,初始化Cipher对象时,它会丢失所有先前获取的状态。 换句话说,初始化密码等同于创建该密码的新实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一: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对象时,它会丢失所有先前获取的状态。 换句话说,初始化密码等同于创建该密码的新实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 加密密钥 -
params
- 算法参数 -
random
- 随机性的来源 - 异常
-
InvalidKeyException
- 如果给定密钥不适合初始化此密码 -
InvalidAlgorithmParameterException
- 如果给定的算法参数不适合此密码,或者此密码需要算法参数且params
为空。 -
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对象时,它会丢失所有先前获取的状态。 换句话说,初始化密码等同于创建该密码的新实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一: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
操作,进行处理,填充(如果要求)被施加。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在新缓冲区中。完成后,此方法将此密码对象重置为先前通过调用
engineInit
初始化时的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用engineInit
指定的操作模式)更多数据。注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
- 参数
-
input
- 输入缓冲区 -
inputOffset
- 输入开始的input
中的偏移量 -
inputLen
- 输入长度 - 结果
- 带有结果的新缓冲区
- 异常
-
IllegalBlockSizeException
- 如果此密码是分组密码,则未请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数; 或者此加密算法无法处理提供的输入数据。 -
BadPaddingException
- 如果此密码处于解密模式,并且已请求(un)填充,但解密数据不受适当填充字节的限制 -
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
操作,进行处理,填充(如果要求)被施加。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在output
缓冲区中,从outputOffset
开始。如果
output
缓冲区太小而无法保存结果,则抛出ShortBufferException
。完成后,此方法将此密码对象重置为先前通过调用
engineInit
初始化时的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用engineInit
指定的操作模式)更多数据。注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
- 参数
-
input
- 输入缓冲区 -
inputOffset
- 输入开始的input
中的偏移量 -
inputLen
- 输入长度 -
output
- 结果的缓冲区 -
outputOffset
- 存储结果的output
中的偏移量 - 结果
- 存储在
output
的字节数 - 异常
-
IllegalBlockSizeException
- 如果此密码是分组密码,则未请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数; 或者此加密算法无法处理提供的输入数据。 -
ShortBufferException
- 如果给定的输出缓冲区太小而无法保存结果 -
BadPaddingException
- 如果此密码处于解密模式,并且已请求(un)填充,但解密数据不受适当填充字节的限制 -
AEADBadTagException
- 如果此密码在AEAD模式下解密(例如GCM / CCM),并且收到的身份验证标记与计算值不匹配
-
engineDoFinal
protected int engineDoFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
在单部分操作中加密或解密数据,或完成多部分操作。 数据经过加密或解密,具体取决于此密码的初始化方式。所有
input.remaining()
起始字节input.position()
处理。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在输出缓冲区中。 返回时,输入缓冲区的位置将等于其限制; 它的限制不会改变。 输出缓冲区的位置将增加n,其中n是此方法返回的值; 输出缓冲区的限制不会改变。如果
output.remaining()
字节不足以保存结果,则抛出ShortBufferException
。完成后,此方法将此密码对象重置为先前通过调用
engineInit
初始化时的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用engineInit
指定的操作模式)更多数据。注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
如果子类比字节数组更有效地处理ByteBuffers,则应考虑重写此方法。
- 参数
-
input
- 输入ByteBuffer -
output
- 输出ByteByffer - 结果
- 存储在
output
的字节数 - 异常
-
IllegalBlockSizeException
- 如果此密码是分组密码,则未请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数; 或者此加密算法无法处理提供的输入数据。 -
ShortBufferException
- 如果输出缓冲区中没有足够的空间 -
BadPaddingException
- 如果此密码处于解密模式,并且已请求(un)填充,但解密数据不受适当填充字节的限制 -
AEADBadTagException
- 如果此密码在AEAD模式下解密(例如GCM / CCM),并且收到的验证标记与计算值不匹配 -
NullPointerException
- 如果任一参数为null
- 从以下版本开始:
- 1.5
-
engineWrap
protected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException
包裹一把钥匙。此具体方法已添加到此先前定义的抽象类中。 (为了向后兼容,它不能是抽象的。)提供程序可以覆盖它以包装密钥。 如果无法包装给定的密钥,则此类覆盖应该抛出IllegalBlockSizeException或InvalidKeyException(在指定的情况下)。 如果未覆盖此方法,则始终抛出UnsupportedOperationException。
- 参数
-
key
- 要包装的密钥。 - 结果
- 包裹的钥匙。
- 异常
-
IllegalBlockSizeException
- 如果此密码是块密码,则不请求填充,并且要包装的密钥的编码长度不是块大小的倍数。 -
InvalidKeyException
- 如果使用此密码包装密钥是不可能或不安全的(例如,硬件保护密钥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
创建类型为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)等模式下操作时,调用此方法可为密码提供AAD。 如果此密码在GCM或CCM模式下运行,则必须在开始对密文进行操作之前提供所有AAD(通过
update
和doFinal
方法)。- 参数
-
src
- 包含AAD的缓冲区 -
offset
- AAD输入开始的src
中的偏移量 -
len
- AAD字节数 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化),不接受AAD,或者在GCM或CCM模式下运行,并且已经为活动加密/解密操作调用了其中一个update
方法 -
UnsupportedOperationException
- 如果此方法尚未被实现覆盖 - 从以下版本开始:
- 1.7
-
engineUpdateAAD
protected void engineUpdateAAD(ByteBuffer src)
继续进行附加认证数据(AAD)的多部分更新。当在AEAD(GCM / CCM)等模式下操作时,调用此方法可为密码提供AAD。 如果此密码在GCM或CCM模式下运行,则必须在开始对密文进行操作之前提供所有AAD(通过
update
和doFinal
方法)。所有
src.remaining()
起始字节src.position()
处理。 返回时,输入缓冲区的位置将等于其限制; 它的限制不会改变。- 参数
-
src
- 包含AAD的缓冲区 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化),不接受AAD,或者在GCM或CCM模式下运行,并且已经为活动加密/解密操作调用了其中一个update
方法 -
UnsupportedOperationException
- 如果此方法尚未被实现覆盖 - 从以下版本开始:
- 1.7
-
-