- java.lang.Object
-
- javax.crypto.Cipher
-
- 已知直接子类:
-
NullCipher
public class Cipher extends Object
此类提供用于加密和解密的加密密码的功能。 它构成了Java Cryptographic Extension(JCE)框架的核心。为了创建Cipher对象,应用程序调用Cipher的
getInstance
方法,并将请求的转换的名称传递给它。 可选地,可以指定提供者的名称。转换是一个字符串,它描述要对给定输入执行的操作(或操作集),以产生一些输出。 转换总是包括加密算法的名称(例如, AES ),并且可以跟随反馈模式和填充方案。
转型的形式如下:
- “ 算法/模式/填充 ”或
- “ 算法 ”
(在后一种情况下,使用模式和填充方案的特定于提供者的默认值)。 例如,以下是有效的转换:
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
使用诸如CFB
和OFB
模式,分组密码可以以小于密码实际块大小的单位加密数据。 请求此类模式时,您可以选择通过将此数字附加到模式名称来指定一次要处理的位数,如“AES/CFB8/NoPadding
”和“AES/OFB32/PKCS5Padding
”转换中所示。 如果未指定此类数字,则使用特定于提供程序的默认值。 (有关JDK Providers的默认值,请参阅JDK Providers Documentation。 )因此,可以使用8位模式(如CFB8或OFB8)将分组密码转换为面向字节的流密码。诸如带有关联数据的认证加密(AEAD)之类的模式为机密数据和未加密的附加关联数据(AAD)提供了真实性保证。 (有关AEAD和AAD算法(如GCM / CCM)的更多信息,请参阅RFC 5116。 )计算认证标签时可以使用机密和AAD数据(类似于
Mac
)。 此标记在加密期间附加到密文,并在解密时验证。诸如GCM / CCM之类的AEAD模式在开始密文真实性计算之前执行所有AAD真实性计算。 为了避免必须在内部缓冲器的密文实施方案中,所有数据AAD必须提供给GCM / CCM的实现(经由
updateAAD
方法)密文被处理之前 (通过update
种doFinal
方法)。请注意,GCM模式对使用给定密钥加密时使用的IV具有唯一性要求。 当针对GCM加密重复IV时,此类使用会受到伪造攻击。 因此,在使用GCM模式的每次加密操作之后,调用者应该使用具有不同IV值的GCM参数重新初始化密码对象。
GCMParameterSpec s = ...; cipher.init(..., s); // If the GCM parameters were generated by the provider, it can // be retrieved by: // cipher.getParameters().getParameterSpec(GCMParameterSpec.class); cipher.updateAAD(...); // AAD cipher.update(...); // Multi-part update cipher.doFinal(...); // conclusion of operation // Use a different IV value for every encryption byte[] newIv = ...; s = new GCMParameterSpec(s.getTLen(), newIv); cipher.init(..., s); ...
ChaCha20和ChaCha20-Poly1305算法对具有给定键的唯一随机数具有类似的要求。 在每次加密或解密操作之后,调用者应使用指定不同nonce值的参数重新初始化其ChaCha20或ChaCha20-Poly1305密码。 有关ChaCha20和ChaCha20-Poly1305算法的更多信息,请参见RFC 7539 。需要Java平台的每个实现来支持以下标准
Cipher
转换,并在括号中使用密钥:-
AES/CBC/NoPadding
(128) -
AES/CBC/PKCS5Padding
(128) -
AES/ECB/NoPadding
(128) -
AES/ECB/PKCS5Padding
(128) -
AES/GCM/NoPadding
(128) -
DES/CBC/NoPadding
(56) -
DES/CBC/PKCS5Padding
(56) -
DES/ECB/NoPadding
(56) -
DES/ECB/PKCS5Padding
(56) -
DESede/CBC/NoPadding
(168) -
DESede/CBC/PKCS5Padding
(168) -
DESede/ECB/NoPadding
(168) -
DESede/ECB/PKCS5Padding
(168) -
RSA/ECB/PKCS1Padding
(RSA/ECB/PKCS1Padding
) -
RSA/ECB/OAEPWithSHA-1AndMGF1Padding
(RSA/ECB/OAEPWithSHA-1AndMGF1Padding
) -
RSA/ECB/OAEPWithSHA-256AndMGF1Padding
(RSA/ECB/OAEPWithSHA-256AndMGF1Padding
)
- 从以下版本开始:
- 1.4
- 另请参见:
-
KeyGenerator
,SecretKey
-
-
字段汇总
字段 变量和类型 字段 描述 static int
DECRYPT_MODE
常量用于将密码初始化为解密模式。static int
ENCRYPT_MODE
常量用于将密码初始化为加密模式。static int
PRIVATE_KEY
用于指示待解包密钥的常量是“私钥”。static int
PUBLIC_KEY
用于指示待解包密钥的常量是“公钥”。static int
SECRET_KEY
用于指示待解包密钥的常量是“密钥”。static int
UNWRAP_MODE
常量用于将密码初始化为密钥解包模式。static int
WRAP_MODE
常量用于将密码初始化为密钥包装模式。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 byte[]
doFinal()
完成多部分加密或解密操作,具体取决于此密码的初始化方式。byte[]
doFinal(byte[] input)
在单部分操作中加密或解密数据,或完成多部分操作。int
doFinal(byte[] output, int outputOffset)
完成多部分加密或解密操作,具体取决于此密码的初始化方式。byte[]
doFinal(byte[] input, int inputOffset, int inputLen)
在单部分操作中加密或解密数据,或完成多部分操作。int
doFinal(byte[] input, int inputOffset, int inputLen, byte[] output)
在单部分操作中加密或解密数据,或完成多部分操作。int
doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
在单部分操作中加密或解密数据,或完成多部分操作。int
doFinal(ByteBuffer input, ByteBuffer output)
在单部分操作中加密或解密数据,或完成多部分操作。String
getAlgorithm()
返回此Cipher
对象的算法名称。int
getBlockSize()
返回块大小(以字节为单位)。ExemptionMechanism
getExemptionMechanism()
返回与此密码一起使用的免除机制对象。static Cipher
getInstance(String transformation)
返回实现指定转换的Cipher
对象。static Cipher
getInstance(String transformation, String provider)
返回实现指定转换的Cipher
对象。static Cipher
getInstance(String transformation, Provider provider)
返回实现指定转换的Cipher
对象。byte[]
getIV()
返回新缓冲区中的初始化向量(IV)。static int
getMaxAllowedKeyLength(String transformation)
根据安装的JCE管辖区域策略文件返回指定转换的最大密钥长度。static AlgorithmParameterSpec
getMaxAllowedParameterSpec(String transformation)
返回AlgorithmParameterSpec对象,该对象包含根据管辖区策略文件的最大密码参数值。int
getOutputSize(int inputLen)
返回输出缓冲区为了保存下一个update
或doFinal
操作的结果所需的长度(以字节为单位),给定输入长度为inputLen
(以字节为单位)。AlgorithmParameters
getParameters()
返回此密码使用的参数。Provider
getProvider()
返回此Cipher
对象的提供者。void
init(int opmode, Certificate certificate)
使用给定证书中的公钥初始化此密码。void
init(int opmode, Certificate certificate, SecureRandom random)
使用给定证书中的公钥和随机源初始化此密码。void
init(int opmode, Key key)
使用密钥初始化此密码。void
init(int opmode, Key key, AlgorithmParameters params)
使用密钥和一组算法参数初始化此密码。void
init(int opmode, Key key, AlgorithmParameters params, SecureRandom random)
使用密钥,一组算法参数和随机源初始化此密码。void
init(int opmode, Key key, SecureRandom random)
使用密钥和随机源初始化此密码。void
init(int opmode, Key key, AlgorithmParameterSpec params)
使用密钥和一组算法参数初始化此密码。void
init(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random)
使用密钥,一组算法参数和随机源初始化此密码。Key
unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType)
打开先前包装的密钥。byte[]
update(byte[] input)
继续多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。byte[]
update(byte[] input, int inputOffset, int inputLen)
继续多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。int
update(byte[] input, int inputOffset, int inputLen, byte[] output)
继续多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。int
update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
继续多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。int
update(ByteBuffer input, ByteBuffer output)
继续多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。void
updateAAD(byte[] src)
继续进行附加认证数据(AAD)的多部分更新。void
updateAAD(byte[] src, int offset, int len)
使用提供的缓冲区的子集继续对附加认证数据(AAD)进行多部分更新。void
updateAAD(ByteBuffer src)
继续进行附加认证数据(AAD)的多部分更新。byte[]
wrap(Key key)
包裹一把钥匙。
-
-
-
字段详细信息
-
ENCRYPT_MODE
public static final int ENCRYPT_MODE
常量用于将密码初始化为加密模式。- 另请参见:
- 常数字段值
-
DECRYPT_MODE
public static final int DECRYPT_MODE
常量用于将密码初始化为解密模式。- 另请参见:
- 常数字段值
-
WRAP_MODE
public static final int WRAP_MODE
常量用于将密码初始化为密钥包装模式。- 另请参见:
- 常数字段值
-
UNWRAP_MODE
public static final int UNWRAP_MODE
常量用于将密码初始化为密钥解包模式。- 另请参见:
- 常数字段值
-
PUBLIC_KEY
public static final int PUBLIC_KEY
用于指示待解包密钥的常量是“公钥”。- 另请参见:
- 常数字段值
-
PRIVATE_KEY
public static final int PRIVATE_KEY
用于指示待解包密钥的常量是“私钥”。- 另请参见:
- 常数字段值
-
SECRET_KEY
public static final int SECRET_KEY
用于指示待解包密钥的常量是“密钥”。- 另请参见:
- 常数字段值
-
-
方法详细信息
-
getInstance
public static final Cipher getInstance(String transformation) throws NoSuchAlgorithmException, NoSuchPaddingException
返回实现指定转换的Cipher
对象。此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将返回一个新的Cipher对象,该对象封装来自第一个支持指定算法的Provider的CipherSpi实现。
请注意,可以通过
Security.getProviders()
方法检索已注册提供程序的列表。- Implementation Note:
-
JDK Reference Implementation还使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供程序顺序。 这可能与Security.getProviders()
返回的提供程序顺序不同。 - 参数
-
transformation
- 转换的名称,例如AES / CBC / PKCS5Padding 。 有关标准转换名称的信息,请参见Java Security Standard Algorithm Names Specification中的密码部分。 - 结果
- 实现请求转换的密码
- 异常
-
NoSuchAlgorithmException
- 如果transformation
是null
,为空,格式无效,或者如果没有Provider
支持指定算法的CipherSpi
实现 -
NoSuchPaddingException
- 如果transformation
包含不可用的填充方案 - 另请参见:
-
Provider
-
getInstance
public static final Cipher getInstance(String transformation, String provider) throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException
返回实现指定转换的Cipher
对象。将返回一个新的Cipher对象,该对象封装来自指定提供程序的CipherSpi实现。 必须在安全提供程序列表中注册指定的提供程序。
请注意,可以通过
Security.getProviders()
方法检索已注册提供程序的列表。- 参数
-
transformation
- 转换的名称,例如AES / CBC / PKCS5Padding 。 有关标准转换名称的信息,请参见Java Security Standard Algorithm Names Specification中的密码部分。 -
provider
- 提供者的名称。 - 结果
- 实现请求转换的密码
- 异常
-
IllegalArgumentException
- 如果provider
是null
或为空 -
NoSuchAlgorithmException
- 如果transformation
是null
,为空,格式无效,或者指定提供程序的指定算法的CipherSpi
实现不可用 -
NoSuchPaddingException
- 如果transformation
包含不可用的填充方案 -
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册 - 另请参见:
-
Provider
-
getInstance
public static final Cipher getInstance(String transformation, Provider provider) throws NoSuchAlgorithmException, NoSuchPaddingException
返回实现指定转换的Cipher
对象。将返回从指定的Provider对象封装CipherSpi实现的新Cipher对象。 请注意,指定的Provider对象不必在提供程序列表中注册。
- 参数
-
transformation
- 转换的名称,例如AES / CBC / PKCS5Padding 。 有关标准转换名称的信息,请参见Java Security Standard Algorithm Names Specification中的密码部分。 -
provider
- 提供者。 - 结果
- 实现请求转换的密码
- 异常
-
IllegalArgumentException
- 如果provider
是null
-
NoSuchAlgorithmException
- 如果transformation
是null
,为空,格式无效,或者指定的算法的CipherSpi
实现在指定的Provider
对象中不可用 -
NoSuchPaddingException
- 如果transformation
包含不可用的填充方案 - 另请参见:
-
Provider
-
getProvider
public final Provider getProvider()
返回此Cipher
对象的提供者。- 结果
-
此
Cipher
对象的提供者
-
getAlgorithm
public final String getAlgorithm()
返回此Cipher
对象的算法名称。这与创建此
Cipher
对象的getInstance
调用之一中指定的名称相同。- 结果
-
此
Cipher
对象的算法名称。
-
getBlockSize
public final int getBlockSize()
返回块大小(以字节为单位)。- 结果
- 块大小(以字节为单位),如果基础算法不是块密码,则为0
-
getOutputSize
public final int getOutputSize(int inputLen)
返回输出缓冲区为了保存下一个update
或doFinal
操作的结果所需的长度(以字节为单位),给定输入长度为inputLen
(以字节为单位)。此调用会考虑先前
update
呼叫,填充和AEAD标记中的任何未处理(缓冲)数据。下一个
update
或doFinal
调用的实际输出长度可能小于此方法返回的长度。- 参数
-
inputLen
- 输入长度(以字节为单位) - 结果
- 所需的输出缓冲区大小(以字节为单位)
- 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化)
-
getIV
public final byte[] getIV()
返回新缓冲区中的初始化向量(IV)。这在创建随机IV的情况下,或在基于密码的加密或解密的上下文中是有用的,其中IV是从用户提供的密码导出的。
- 结果
- 新缓冲区中的初始化向量,如果基础算法不使用IV,或者尚未设置IV,则为null。
-
getParameters
public final AlgorithmParameters getParameters()
返回此密码使用的参数。返回的参数可能与用于初始化此密码的参数相同,或者可能包含底层密码实现使用的默认和随机参数值的组合(如果此密码需要算法参数但未使用任何语法初始化)。
- 结果
- 此密码使用的参数,如果此密码不使用任何参数,则返回null。
-
getExemptionMechanism
public final ExemptionMechanism getExemptionMechanism()
返回与此密码一起使用的免除机制对象。- 结果
- 与此密码一起使用的免除机制对象,如果此密码不使用任何免除机制,则为null。
-
init
public final void init(int opmode, Key key) throws InvalidKeyException
使用密钥初始化此密码。密码初始化为以下四种操作之一:加密,解密,密钥包装或密钥解包,具体取决于
opmode
的值。如果此密码需要任何无法从给定的
key
派生的算法参数,则基础密码实现应该自行生成所需的参数(使用特定于提供程序的默认值或随机值),如果它正在初始化以进行加密或密钥包装,并且如果正在初始化解密或密钥解InvalidKeyException
则引发InvalidKeyException
。 可以使用getParameters
或getIV
(如果参数是IV)检索生成的参数。如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供程序的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将使用最高优先级安装提供程序的
SecureRandom
实现作为随机源。 (如果没有安装的提供程序提供SecureRandom的实现,则将使用系统提供的随机源。)请注意,初始化Cipher对象时,它会丢失所有先前获取的状态。 换句话说,初始化密码等同于创建该密码的新实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 关键 - 异常
-
InvalidKeyException
- 如果给定密钥不适合初始化此密码,或者需要无法从给定密钥确定的算法参数,或者给定密钥的密钥大小超过允许的最大密钥大小(根据配置的管辖区策略文件确定) 。 -
UnsupportedOperationException
- 如果opmode
是WRAP_MODE
或UNWRAP_MODE
但基础CipherSpi
未实现该模式。
-
init
public final void init(int opmode, Key key, SecureRandom random) throws InvalidKeyException
使用密钥和随机源初始化此密码。密码初始化为以下四种操作之一:加密,解密,密钥包装或密钥解包,具体取决于
opmode
的值。如果此密码需要任何无法从给定的
key
派生的算法参数,则基础密码实现应该自行生成所需的参数(使用特定于提供程序的默认值或随机值),如果它正在初始化以进行加密或密钥包装,并且如果正在初始化解密或密钥解InvalidKeyException
则提出InvalidKeyException
。 可以使用getParameters
或getIV
(如果参数是IV)检索生成的参数。如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供程序的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将从
random
获得它们。请注意,初始化Cipher对象时,它会丢失所有先前获取的状态。 换句话说,初始化密码等同于创建该密码的新实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 加密密钥 -
random
- 随机性的来源 - 异常
-
InvalidKeyException
- 如果给定密钥不适合初始化此密码,或者需要无法从给定密钥确定的算法参数,或者给定密钥的密钥大小超过允许的最大密钥大小(根据配置的管辖区策略文件确定) 。 -
UnsupportedOperationException
- 如果opmode
是WRAP_MODE
或UNWRAP_MODE
但基础CipherSpi
未实现该模式。
-
init
public final void init(int opmode, Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException
使用密钥和一组算法参数初始化此密码。密码初始化为以下四种操作之一:加密,解密,密钥包装或密钥解包,具体取决于
opmode
的值。如果此密码需要任何算法参数且
params
为null,则基础密码实现应该自行生成所需参数(使用特定于提供程序的默认值或随机值)(如果它正在初始化以进行加密或密钥换行),并且如果为初始化加密或密钥换行,则引发InvalidAlgorithmParameterException
它正在初始化以进行解密或密钥解包。 可以使用getParameters
或getIV
(如果参数是IV)检索生成的参数。如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供程序的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将使用最高优先级安装提供程序的
SecureRandom
实现作为随机源。 (如果没有安装的提供程序提供SecureRandom的实现,则将使用系统提供的随机源。)请注意,初始化Cipher对象时,它会丢失所有先前获取的状态。 换句话说,初始化密码等同于创建该密码的新实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 加密密钥 -
params
- 算法参数 - 异常
-
InvalidKeyException
- 如果给定密钥不适合初始化此密码,或其密钥大小超过允许的最大密钥大小(由配置的管辖区策略文件确定)。 -
InvalidAlgorithmParameterException
- 如果给定的算法参数不适合此密码,或者此密码需要算法参数且params
为空,或者给定的算法参数暗示加密强度超过法定限制(根据配置的管辖区策略文件确定)。 -
UnsupportedOperationException
- 如果opmode
是WRAP_MODE
或UNWRAP_MODE
但基础CipherSpi
未实现该模式。
-
init
public final void init(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
使用密钥,一组算法参数和随机源初始化此密码。密码初始化为以下四种操作之一:加密,解密,密钥包装或密钥解包,具体取决于
opmode
的值。如果此密码需要任何算法参数且
params
为null,则底层密码实现应该自行生成所需参数(使用特定于提供程序的默认值或随机值)(如果它正在初始化以进行加密或密钥换行),并且如果为初始化加密或密钥换行,则引发InvalidAlgorithmParameterException
它正在初始化以进行解密或密钥解包。 可以使用getParameters
或getIV
(如果参数是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
但基础CipherSpi
未实现该模式。
-
init
public final void init(int opmode, Key key, AlgorithmParameters params) throws InvalidKeyException, InvalidAlgorithmParameterException
使用密钥和一组算法参数初始化此密码。密码初始化为以下四种操作之一:加密,解密,密钥包装或密钥解包,具体取决于
opmode
的值。如果此密码需要任何算法参数且
params
为null,则底层密码实现应该自行生成所需参数(使用特定于提供程序的默认值或随机值)(如果它正在初始化以进行加密或密钥换行),并且如果此InvalidAlgorithmParameterException
它正在初始化以进行解密或密钥解包。 可以使用getParameters
或getIV
(如果参数是IV)检索生成的参数。如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供程序的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将使用最高优先级安装提供程序的
SecureRandom
实现作为随机源。 (如果没有安装的提供程序提供SecureRandom的实现,则将使用系统提供的随机源。)请注意,初始化Cipher对象时,它会丢失所有先前获取的状态。 换句话说,初始化密码等同于创建该密码的新实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 加密密钥 -
params
- 算法参数 - 异常
-
InvalidKeyException
- 如果给定密钥不适合初始化此密码,或其密钥大小超过允许的最大密钥大小(根据配置的管辖区策略文件确定)。 -
InvalidAlgorithmParameterException
- 如果给定的算法参数不适合此密码,或者此密码需要算法参数且params
为空,或者给定的算法参数暗示加密强度超过法定限制(根据配置的管辖区策略文件确定)。 -
UnsupportedOperationException
- 如果opmode
是WRAP_MODE
或UNWRAP_MODE
但基础CipherSpi
未实现该模式。
-
init
public final void init(int opmode, Key key, AlgorithmParameters params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
使用密钥,一组算法参数和随机源初始化此密码。密码初始化为以下四种操作之一:加密,解密,密钥包装或密钥解包,具体取决于
opmode
的值。如果此密码需要任何算法参数且
params
为null,则基础密码实现应该自行生成所需的参数(使用特定于提供程序的默认值或随机值)(如果它正在初始化以进行加密或密钥换行),并且如果它被初始化以进行加密或密钥换行,则引发InvalidAlgorithmParameterException
它正在初始化以进行解密或密钥解包。 可以使用getParameters
或getIV
(如果参数是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
但该模式未由基础CipherSpi
实施。
-
init
public final void init(int opmode, Certificate certificate) throws InvalidKeyException
使用给定证书中的公钥初始化此密码。密码初始化为以下四种操作之一:加密,解密,密钥包装或密钥解包,具体取决于
opmode
的值。如果证书的类型为X.509并且密钥用法扩展字段标记为严重,则密钥用法扩展字段的值意味着证书中的公钥及其对应的私钥不应用于以
opmode
的值表示的操作,抛出InvalidKeyException
。如果此密码需要任何无法从给定证书中的公钥派生的算法参数,则基础密码实现应自行生成所需参数(使用特定于提供程序的默认值或随机值),如果它正在初始化以进行加密或密钥包装,如果正在初始化解密或密钥解包,则引发
InvalidKeyException
。 可以使用getParameters
或getIV
(如果参数是IV)检索生成的参数。如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供程序的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将使用最高优先级安装提供程序的
SecureRandom
实现作为随机源。 (如果没有安装的提供程序提供SecureRandom的实现,则将使用系统提供的随机源。)请注意,初始化Cipher对象时,它会丢失所有先前获取的状态。 换句话说,初始化密码等同于创建该密码的新实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
certificate
- 证书 - 异常
-
InvalidKeyException
- 如果给定证书中的公钥不适合初始化此密码,或者此密码需要无法从给定证书中的公钥确定的算法参数,或者给定证书中的公钥的密钥大小具有密钥大小超过允许的最大密钥大小(由配置的权限策略文件确定)。 -
UnsupportedOperationException
- 如果opmode
是WRAP_MODE
或UNWRAP_MODE
但基础CipherSpi
未实现该模式。
-
init
public final void init(int opmode, Certificate certificate, SecureRandom random) throws InvalidKeyException
使用给定证书中的公钥和随机源初始化此密码。密码初始化为以下四种操作之一:加密,解密,密钥包装或密钥解包,具体取决于
opmode
的值。如果证书的类型为X.509并且密钥用法扩展字段标记为严重,则密钥用法扩展字段的值意味着证书中的公钥及其对应的私钥不应用于以
opmode
的值表示的操作,抛出InvalidKeyException
。如果此密码需要任何无法从给定
certificate
公钥派生的算法参数,则基础密码实现应自行生成所需参数(使用特定于提供程序的默认值或随机值),如果它正在初始化以进行加密或密钥包装,如果正在初始化解密或密钥解包,则引发InvalidKeyException
。 可以使用getParameters
或getIV
(如果参数是IV)检索生成的参数。如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供程序的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将从
random
获得它们。请注意,初始化Cipher对象时,它会丢失所有先前获取的状态。 换句话说,初始化密码等同于创建该密码的新实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
certificate
- 证书 -
random
- 随机性的来源 - 异常
-
InvalidKeyException
- 如果给定证书中的公钥不适合初始化此密码,或者此密码需要无法从给定证书中的公钥确定的算法参数,或者给定证书中的公钥的密钥大小具有密钥大小超过允许的最大密钥大小(由配置的权限策略文件确定)。 -
UnsupportedOperationException
- 如果opmode
是WRAP_MODE
或UNWRAP_MODE
但基础CipherSpi
未实现该模式。
-
update
public final byte[] update(byte[] input)
继续多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。处理
input
缓冲区中的字节,并将结果存储在新缓冲区中。如果
input
的长度为零,则此方法返回null
。- 参数
-
input
- 输入缓冲区 - 结果
- 带有结果的新缓冲区,如果底层密码是块密码且输入数据太短而不能产生新块,则返回null。
- 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化)
-
update
public final byte[] update(byte[] input, int inputOffset, int inputLen)
继续多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。第一
inputLen
字节在input
缓冲区中,从inputOffset
以下,被处理,并且结果被存储在新的缓冲器。如果
inputLen
为零,则此方法返回null
。- 参数
-
input
- 输入缓冲区 -
inputOffset
- 输入开始的input
中的偏移量 -
inputLen
- 输入长度 - 结果
- 带有结果的新缓冲区,如果底层密码是块密码且输入数据太短而不能产生新块,则返回null。
- 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化)
-
update
public final int update(byte[] input, int inputOffset, int inputLen, byte[] output) throws ShortBufferException
继续多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。第一
inputLen
字节在input
缓冲区中,从inputOffset
以下,被处理,并且结果被存储在output
缓冲器。如果
output
缓冲区太小而无法保存结果,则抛出ShortBufferException
。 在这种情况下,请使用更大的输出缓冲区重复此调用。 使用getOutputSize
确定输出缓冲区应该有多大。如果
inputLen
为零,则此方法返回零长度。注意:此方法应该是复制安全的,这意味着
input
和output
缓冲区可以引用相同的字节数组,并且在将结果复制到输出缓冲区时不会覆盖未处理的输入数据。- 参数
-
input
- 输入缓冲区 -
inputOffset
- 输入开始的input
中的偏移量 -
inputLen
- 输入长度 -
output
- 结果的缓冲区 - 结果
-
存储在
output
的字节数 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化) -
ShortBufferException
- 如果给定的输出缓冲区太小而无法保存结果
-
update
public final int update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException
继续多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。第一
inputLen
字节在input
缓冲区中,从inputOffset
以下,被处理,并且结果被存储在output
缓冲区中,从outputOffset
以下。如果
output
缓冲区太小而无法保存结果,则抛出ShortBufferException
。 在这种情况下,请使用更大的输出缓冲区重复此调用。 使用getOutputSize
确定输出缓冲区应该有多大。如果
inputLen
为零,则此方法返回零长度。注意:此方法应该是复制安全的,这意味着
input
和output
缓冲区可以引用相同的字节数组,并且在将结果复制到输出缓冲区时不会覆盖未处理的输入数据。- 参数
-
input
- 输入缓冲区 -
inputOffset
- 输入开始的input
中的偏移量 -
inputLen
- 输入长度 -
output
- 结果的缓冲区 -
outputOffset
- 存储结果的output
中的偏移量 - 结果
-
存储在
output
的字节数 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化) -
ShortBufferException
- 如果给定的输出缓冲区太小而无法保存结果
-
update
public final int update(ByteBuffer input, ByteBuffer output) throws ShortBufferException
继续多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。所有
input.remaining()
起始字节input.position()
处理。 结果存储在输出缓冲区中。 返回时,输入缓冲区的位置将等于其限制; 它的限制不会改变。 输出缓冲区的位置将增加n,其中n是此方法返回的值; 输出缓冲区的限制不会改变。如果
output.remaining()
字节不足以保存结果,则抛出ShortBufferException
。 在这种情况下,请使用更大的输出缓冲区重复此调用。 使用getOutputSize
确定输出缓冲区应该有多大。注意:此方法应该是复制安全的,这意味着
input
和output
缓冲区可以引用相同的内存块,并且在将结果复制到输出缓冲区时不会覆盖未处理的输入数据。- 参数
-
input
- 输入ByteBuffer -
output
- 输出ByteByffer - 结果
-
存储在
output
的字节数 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化) -
IllegalArgumentException
- 如果输入和输出是同一个对象 -
ReadOnlyBufferException
- 如果输出缓冲区是只读的 -
ShortBufferException
- 如果输出缓冲区中没有足够的空间 - 从以下版本开始:
- 1.5
-
doFinal
public final byte[] doFinal() throws IllegalBlockSizeException, BadPaddingException
完成多部分加密或解密操作,具体取决于此密码的初始化方式。处理在先前的
update
操作期间可能已缓冲的输入数据,并应用填充(如果请求)。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在新缓冲区中。完成后,此方法将此密码对象重置为先前通过调用
init
初始化时的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init
指定的操作模式)更多数据。注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
- 结果
- 带有结果的新缓冲区
- 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化) -
IllegalBlockSizeException
- 如果此密码是分组密码,则未请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数; 或者此加密算法无法处理提供的输入数据。 -
BadPaddingException
- 如果此密码处于解密模式,并且已请求(un)填充,但解密数据不受适当填充字节的限制 -
AEADBadTagException
- 如果此密码在AEAD模式下解密(例如GCM / CCM),并且收到的验证标记与计算值不匹配
-
doFinal
public final int doFinal(byte[] output, int outputOffset) throws IllegalBlockSizeException, ShortBufferException, BadPaddingException
完成多部分加密或解密操作,具体取决于此密码的初始化方式。处理在先前的
update
操作期间可能已缓冲的输入数据,并应用填充(如果请求)。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在output
缓冲区中,从outputOffset
开始。如果
output
缓冲区太小而无法保存结果,则抛出ShortBufferException
。 在这种情况下,请使用更大的输出缓冲区重复此调用。 使用getOutputSize
确定输出缓冲区应该有多大。完成后,此方法将此密码对象重置为先前通过调用
init
初始化时的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init
指定的操作模式)更多数据。注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
- 参数
-
output
- 结果的缓冲区 -
outputOffset
- 存储结果的output
中的偏移量 - 结果
-
存储在
output
的字节数 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化) -
IllegalBlockSizeException
- 如果此密码是分组密码,则未请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数; 或者此加密算法无法处理提供的输入数据。 -
ShortBufferException
- 如果给定的输出缓冲区太小而无法保存结果 -
BadPaddingException
- 如果此密码处于解密模式,并且已请求(un)填充,但解密的数据不受适当的填充字节限制 -
AEADBadTagException
- 如果此密码在AEAD模式下解密(例如GCM / CCM),并且收到的身份验证标记与计算值不匹配
-
doFinal
public final byte[] doFinal(byte[] input) throws IllegalBlockSizeException, BadPaddingException
在单部分操作中加密或解密数据,或完成多部分操作。 数据经过加密或解密,具体取决于此密码的初始化方式。input
缓冲区中的字节以及在先前的update
操作期间可能已缓冲的任何输入字节都将被处理,并应用填充(如果请求)。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在新缓冲区中。完成后,此方法将此密码对象重置为先前通过调用
init
初始化时的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init
指定的操作模式)更多数据。注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
- 参数
-
input
- 输入缓冲区 - 结果
- 带有结果的新缓冲区
- 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化) -
IllegalBlockSizeException
- 如果此密码是分组密码,则未请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数; 或者此加密算法无法处理提供的输入数据。 -
BadPaddingException
- 如果此密码处于解密模式,并且已请求(un)填充,但解密数据不受适当填充字节的限制 -
AEADBadTagException
- 如果此密码在AEAD模式下解密(例如GCM / CCM),并且收到的验证标记与计算值不匹配
-
doFinal
public final byte[] doFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException, BadPaddingException
在单部分操作中加密或解密数据,或完成多部分操作。 数据经过加密或解密,具体取决于此密码的初始化方式。第一
inputLen
字节在input
缓冲区中,从inputOffset
以下,并且可能在上一次期间已缓存的任何输入字节update
操作,进行处理,填充(如果要求)被施加。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在新缓冲区中。完成后,此方法将此密码对象重置为先前通过调用
init
初始化时的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init
指定的操作模式)更多数据。注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
- 参数
-
input
- 输入缓冲区 -
inputOffset
- 输入开始的input
中的偏移量 -
inputLen
- 输入长度 - 结果
- 带有结果的新缓冲区
- 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化) -
IllegalBlockSizeException
- 如果此密码是分组密码,则未请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数; 或者此加密算法无法处理提供的输入数据。 -
BadPaddingException
- 如果此密码处于解密模式,并且已请求(un)填充,但解密数据不受适当填充字节的限制 -
AEADBadTagException
- 如果此密码在AEAD模式下解密(例如GCM / CCM),并且收到的身份验证标记与计算值不匹配
-
doFinal
public final int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
在单部分操作中加密或解密数据,或完成多部分操作。 数据经过加密或解密,具体取决于此密码的初始化方式。第一
inputLen
字节在input
缓冲区中,从inputOffset
以下,并且可能在上一次期间已缓存的任何输入字节update
操作,进行处理,填充(如果要求)被施加。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在output
缓冲区中。如果
output
缓冲区太小而无法保存结果,则抛出ShortBufferException
。 在这种情况下,请使用更大的输出缓冲区重复此调用。 使用getOutputSize
确定输出缓冲区应该有多大。完成后,此方法将此密码对象重置为先前通过调用
init
初始化时的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init
指定的操作模式)更多数据。注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
注意:此方法应该是复制安全的,这意味着
input
和output
缓冲区可以引用相同的字节数组,并且在将结果复制到输出缓冲区时不会覆盖未处理的输入数据。- 参数
-
input
- 输入缓冲区 -
inputOffset
- 输入开始的input
中的偏移量 -
inputLen
- 输入长度 -
output
- 结果的缓冲区 - 结果
-
存储在
output
的字节数 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化) -
IllegalBlockSizeException
- 如果此密码是分组密码,则未请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数; 或者此加密算法无法处理提供的输入数据。 -
ShortBufferException
- 如果给定的输出缓冲区太小而无法保存结果 -
BadPaddingException
- 如果此密码处于解密模式,并且已请求(un)填充,但解密数据不受适当填充字节的限制 -
AEADBadTagException
- 如果此密码在AEAD模式下解密(例如GCM / CCM),并且收到的验证标记与计算值不匹配
-
doFinal
public final int doFinal(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
。 在这种情况下,请使用更大的输出缓冲区重复此调用。 使用getOutputSize
确定输出缓冲区应该有多大。完成后,此方法将此密码对象重置为先前通过调用
init
初始化时的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init
指定的操作模式)更多数据。注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
注意:此方法应该是复制安全的,这意味着
input
和output
缓冲区可以引用相同的字节数组,并且在将结果复制到输出缓冲区时不会覆盖未处理的输入数据。- 参数
-
input
- 输入缓冲区 -
inputOffset
- 输入开始的input
中的偏移量 -
inputLen
- 输入长度 -
output
- 结果的缓冲区 -
outputOffset
- 存储结果的output
中的偏移量 - 结果
-
存储在
output
的字节数 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化) -
IllegalBlockSizeException
- 如果此密码是分组密码,则未请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数; 或者此加密算法无法处理提供的输入数据。 -
ShortBufferException
- 如果给定的输出缓冲区太小而无法保存结果 -
BadPaddingException
- 如果此密码处于解密模式,并且已请求(un)填充,但解密数据不受适当填充字节的限制 -
AEADBadTagException
- 如果此密码在AEAD模式下解密(例如GCM / CCM),并且收到的验证标记与计算值不匹配
-
doFinal
public final int doFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
在单部分操作中加密或解密数据,或完成多部分操作。 数据经过加密或解密,具体取决于此密码的初始化方式。所有
input.remaining()
起始字节input.position()
处理。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在输出缓冲区中。 返回时,输入缓冲区的位置将等于其限制; 它的限制不会改变。 输出缓冲区的位置将增加n,其中n是此方法返回的值; 输出缓冲区的限制不会改变。如果
output.remaining()
字节不足以保存结果,则抛出ShortBufferException
。 在这种情况下,请使用更大的输出缓冲区重复此调用。 使用getOutputSize
确定输出缓冲区应该有多大。完成后,此方法将此密码对象重置为先前通过调用
init
初始化时的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init
指定的操作模式)更多数据。注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
注意:此方法应该是复制安全的,这意味着
input
和output
缓冲区可以引用相同的字节数组,并且在将结果复制到输出缓冲区时不会覆盖未处理的输入数据。- 参数
-
input
- 输入ByteBuffer -
output
- 输出ByteBuffer - 结果
-
存储在
output
的字节数 - 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化) -
IllegalArgumentException
- 如果输入和输出是同一个对象 -
ReadOnlyBufferException
- 如果输出缓冲区是只读的 -
IllegalBlockSizeException
- 如果此密码是分组密码,则未请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数; 或者此加密算法无法处理提供的输入数据。 -
ShortBufferException
- 如果输出缓冲区中没有足够的空间 -
BadPaddingException
- 如果此密码处于解密模式,并且已请求(un)填充,但解密数据不受适当填充字节的限制 -
AEADBadTagException
- 如果此密码在AEAD模式下解密(例如GCM / CCM),并且收到的验证标记与计算值不匹配 - 从以下版本开始:
- 1.5
-
wrap
public final byte[] wrap(Key key) throws IllegalBlockSizeException, InvalidKeyException
包裹一把钥匙。- 参数
-
key
- 要包装的密钥。 - 结果
- 包裹的钥匙。
- 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化)。 -
IllegalBlockSizeException
- 如果此密码是块密码,则不请求填充,并且要包装的密钥的编码长度不是块大小的倍数。 -
InvalidKeyException
- 如果使用此密码包装密钥是不可能或不安全的(例如,硬件保护密钥正在传递给仅软件密码)。 -
UnsupportedOperationException
- 如果不支持CipherSpi
的相应方法。
-
unwrap
public final Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException
打开先前包装的密钥。- 参数
-
wrappedKey
- 要解开的钥匙。 -
wrappedKeyAlgorithm
- 与包装密钥关联的算法。 -
wrappedKeyType
- 包装密钥的类型。 这必须是一个SECRET_KEY
,PRIVATE_KEY
,或PUBLIC_KEY
。 - 结果
- 打开的钥匙。
- 异常
-
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化)。 -
NoSuchAlgorithmException
- 如果没有安装的提供程序可以为wrappedKeyType
创建类型为wrappedKeyType
的wrappedKeyAlgorithm
。 -
InvalidKeyException
- 如果wrappedKey
不表示wrappedKeyType
的类型为wrappedKeyAlgorithm
的包装密钥。 -
UnsupportedOperationException
- 如果不支持CipherSpi
的相应方法。
-
getMaxAllowedKeyLength
public static final int getMaxAllowedKeyLength(String transformation) throws NoSuchAlgorithmException
根据安装的JCE管辖区域策略文件返回指定转换的最大密钥长度。 如果安装了JCE无限强度管辖区策略文件,则将返回Integer.MAX_VALUE。 有关默认密钥大小和JCE管辖区域策略文件的更多信息,请参阅JDK Providers Documentation中的加密默认值和限制。- 参数
-
transformation
- 密码转换。 - 结果
- 最大密钥长度(以位为单位)或Integer.MAX_VALUE。
- 异常
-
NullPointerException
- 如果transformation
为空。 -
NoSuchAlgorithmException
- 如果transformation
不是有效转换,即以“algorithm”或“algorithm / mode / padding”的形式。 - 从以下版本开始:
- 1.5
-
getMaxAllowedParameterSpec
public static final AlgorithmParameterSpec getMaxAllowedParameterSpec(String transformation) throws NoSuchAlgorithmException
返回AlgorithmParameterSpec对象,该对象包含根据管辖区策略文件的最大密码参数值。 如果安装了JCE无限强度管辖区域策略文件,或者策略文件中指定转换的参数没有最大限制,则返回null。- 参数
-
transformation
- 密码转换。 - 结果
- 一个AlgorithmParameterSpec,它保存最大值或null。
- 异常
-
NullPointerException
- 如果transformation
为空。 -
NoSuchAlgorithmException
- 如果transformation
不是有效转换,即以“algorithm”或“algorithm / mode / padding”的形式。 - 从以下版本开始:
- 1.5
-
updateAAD
public final void updateAAD(byte[] src)
继续进行附加认证数据(AAD)的多部分更新。当在AEAD(GCM / CCM)等模式下操作时,调用此方法可为密码提供AAD。 如果此密码在GCM或CCM模式下运行,则必须在开始对密文进行操作之前提供所有AAD(通过
update
和doFinal
方法)。- 参数
-
src
- 包含附加认证数据的缓冲区 - 异常
-
IllegalArgumentException
- 如果src
字节数组为空 -
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化),不接受AAD,或者在GCM或CCM模式下运行,并且已经为活动加密/解密操作调用了其中一个update
方法 -
UnsupportedOperationException
-如果在相应的方法CipherSpi
尚未覆盖的实现 - 从以下版本开始:
- 1.7
-
updateAAD
public final void updateAAD(byte[] src, int offset, int len)
使用提供的缓冲区的子集继续对附加认证数据(AAD)进行多部分更新。当在AEAD(GCM / CCM)等模式下操作时,调用此方法可为密码提供AAD。 如果此密码在GCM或CCM模式下运行,则必须在开始对密文进行操作之前提供所有AAD(通过
update
和doFinal
方法)。- 参数
-
src
- 包含AAD的缓冲区 -
offset
-src
中AAD输入开始的偏移量 -
len
- AAD字节数 - 异常
-
IllegalArgumentException
- 如果src
字节数组为空,或者offset
或length
小于0,或者offset
和len
的总和大于src
字节数组的长度 -
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化),不接受AAD,或者在GCM或CCM模式下运行,并且已经为活动加密/解密操作调用了其中一个update
方法 -
UnsupportedOperationException
-如果在相应的方法CipherSpi
尚未覆盖的实现 - 从以下版本开始:
- 1.7
-
updateAAD
public final void updateAAD(ByteBuffer src)
继续进行附加认证数据(AAD)的多部分更新。当在AEAD(GCM / CCM)等模式下操作时,调用此方法可为密码提供AAD。 如果此密码在GCM或CCM模式下运行,则必须在开始对密文进行操作之前提供所有AAD(通过
update
和doFinal
方法)。所有
src.remaining()
起始字节src.position()
处理。 返回时,输入缓冲区的位置将等于其限制; 它的限制不会改变。- 参数
-
src
- 包含AAD的缓冲区 - 异常
-
IllegalArgumentException
- 如果src ByteBuffer
为空 -
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化),不接受AAD,或者在GCM或CCM模式下运行,并且已经为活动加密/解密操作调用了其中一个update
方法 -
UnsupportedOperationException
-如果在相应的方法CipherSpi
尚未覆盖的实现 - 从以下版本开始:
- 1.7
-
-