- java.lang.Object
-
- javax.crypto.CipherSpi
-
public abstract class CipherSpi extends Object
该类定义了Cipher
类的 ( SPI )。 该类中的所有抽象方法必须由希望提供特定密码算法的实现的每个加密服务提供商来实现。为了创建一个
Cipher
的实例,封装了这个CipherSpi
类的一个实例,一个应用程序调用了Cipher
引擎类的27073038545870工厂方法之一,并指定了请求的转换 。 可选地,应用程序还可以指定提供者的名称。转换是描述要在给定输入上执行的操作(或操作集)的字符串,以产生一些输出。 转换总是包括加密算法的名称(例如, DES ),并且可以跟随有反馈模式和填充方案。
转换形式如下:
- “ 算法/模式/填充 ”或
- “ 算法 ”
(在后一种情况下,使用模式和填充方案的提供者特定的默认值)。 例如,以下是有效的转换:
Cipher c = Cipher.getInstance("DES/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
实现DES / ECB / PKCS5Padding,一个实现DES / CBC / PKCS5Padding,一个实现DES / CFB / PKCS5Padding,和又一一个实现DES / OFB / PKCS5Padding。 该提供商将在其主类中具有以下Cipher
属性:Cipher.
DES/ECB/PKCS5PaddingCipher.
DES/CBC/PKCS5PaddingCipher.
DES/CFB/PKCS5PaddingCipher.
DES/OFB/PKCS5Padding
另一个提供者可以针对上述各种模式实现一个类(即,一个用于ECB的类,一个用于CBC ,一个用于CBC ,一个用于CFB ,另一个用于OFB ),一个类用于PKCS5Padding ,以及一个通用的DES类,分类为
CipherSpi
。 该提供商在其主类中将具有以下Cipher
属性:Cipher.
DES
Cipher
引擎类的getInstance
工厂方法遵循这些规则,以便实例化一个提供者的CipherSpi
的实现,用于“ 算法 ”形式的转换:- 检查提供者是否已经为指定的“ 算法 ”注册了一个
CipherSpi
的子类。如果答案为YES,则实例化该类,对于其模式和填充方案默认值(由提供者提供)使用。
如果答案是否定的,扔一个
NoSuchAlgorithmException
例外。
Cipher
引擎类的getInstance
工厂方法遵循这些规则,以便实例化一个供应商的CipherSpi
的实现,用于“ algorithm / mode / padding ”形式的转换:- 检查提供者是否已经为指定的“ algorithm / mode / padding ”转换注册了一个
CipherSpi
的子类。如果答案为YES,则将其实例化。
如果答案为否,请转到下一步。
- 检查提供者是否注册了子转换“ 算法/模式 ”的子集
CipherSpi
。如果答案为YES,则将其实例化,并在新实例上调用
engineSetPadding(padding)
。如果答案为否,请转到下一步。
- 检查提供者是否注册了子转换“ 算法// padding ”(注意双斜杠)的子类为
CipherSpi
。如果答案为YES,则将其实例化,并在新实例上调用
engineSetMode(mode)
。如果答案为否,请转到下一步。
- 检查提供者是否已经为子转换“ 算法 ”注册了一个
CipherSpi
的子类。如果答案为YES,则将其实例化,并在新实例上调用
engineSetMode(mode)
和engineSetPadding(padding)
。如果答案为NO,则抛出
NoSuchAlgorithmException
异常。
- 从以下版本开始:
- 1.4
- 另请参见:
-
KeyGenerator
,SecretKey
-
-
构造方法摘要
构造方法 Constructor 描述 CipherSpi()
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 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)
给定输入长度为inputLen
(以字节为单位),返回输出缓冲区需要保存下一个update
或doFinal
操作的结果的字节长度。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)
给定输入长度为inputLen
(以字节为单位),返回输出缓冲区需要保存下一个update
或doFinal
操作的结果的字节长度。此呼叫考虑了来自以前的
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
的值,对以下四个操作之一进行密码初始化:加密,解密,密钥包装或密钥解opmode
。如果此密码需要不能从给定的
key
导出的任何算法参数,则底层的密码实现应该自动生成所需的参数(使用提供者特定的默认值或随机值),如果它被初始化为加密或密钥包装,以及提出一个InvalidKeyException
如果它被初始化解密或密钥解包。 可以使用engineGetParameters
或engineGetIV
(如果参数为IV)检索生成的参数。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从
random
获得。请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的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
的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode
。如果此密码需要任何算法参数,并且
params
为null,则底层加密实现应该自动生成所需参数(使用提供者特定的默认值或随机值),如果它被初始化为加密或密钥包装,并且提出一个InvalidAlgorithmParameterException
if正在为解密或密钥解包进行初始化。 生成的参数可以使用engineGetParameters
或engineGetIV
(如果参数为IV)检索。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从
random
得到它们。请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的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
的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode
。如果此密码需要任何算法参数,并且
params
为null,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果正在初始化加密或密钥包装,并提出一个InvalidAlgorithmParameterException
if正在为解密或密钥解包进行初始化。 可以使用engineGetParameters
或engineGetIV
(如果参数为IV)检索生成的参数。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从
random
获得。请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 加密密钥 -
params
- 算法参数 -
random
- 随机性的来源 - 异常
-
InvalidKeyException
- 如果给定的密钥不适合初始化此密码 -
InvalidAlgorithmParameterException
- 如果给定的算法参数不适合该密码,或者该密码需要算法参数,并且params
为空。 -
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
- 如果使用此密码将密钥包装是不可能或不安全的(例如,硬件保护密钥正在传递给仅软件密码)。 -
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模式下运行,则必须在密文开始操作之前(通过
update
和doFinal
方法)提供所有AAD。- 参数
-
src
- 包含AAD的缓冲区 -
offset
- 偏移量在src
,其中AAD输入开始 -
len
- AAD字节数 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化),则不接受AAD,或者在GCM或CCM模式下运行,并且已经为update
方法之一调用了主动加密/解密操作 -
UnsupportedOperationException
- 如果此方法尚未被实现覆盖 - 从以下版本开始:
- 1.7
-
engineUpdateAAD
protected void engineUpdateAAD(ByteBuffer src)
继续进行附加认证数据(AAD)的多部分更新。当使用AEAD(GCM / CCM)等模式运行时,调用此方法可以为密码提供AAD。 如果此密码在GCM或CCM模式下运行,则必须在密文开始操作之前(通过
update
和doFinal
方法)提供所有AAD。所有
src.remaining()
起始字节src.position()
被处理。 返回时,输入缓冲区的位置将等于其限制; 其限制将不会改变。- 参数
-
src
- 包含AAD的缓冲区 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化),则不接受AAD,或者如果以GCM或CCM模式运行,并且update
方法之一已经被用于主动加密/解密操作 -
UnsupportedOperationException
- 如果此方法尚未被实现覆盖 - 从以下版本开始:
- 1.7
-
-