- java.lang.Object
-
- javax.crypto.Cipher
-
- 已知直接子类:
-
NullCipher
public class Cipher extends Object
该类提供加密和解密的加密密码的功能。 它构成了Java加密扩展(JCE)框架的核心。为了创建一个Cipher对象,应用程序调用Cipher的
getInstance
方法,并将所请求的转换的名称传递给它。 可选地,可以指定提供者的名称。转换是描述要在给定输入上执行的操作(或操作集)的字符串,以产生一些输出。 转换总是包括加密算法的名称(例如, DES ),并且可以跟随有反馈模式和填充方案。
转换形式如下:
- “ 算法/模式/填充 ”或
- “ 算法 ”
(在后一种情况下,使用模式和填充方案的提供者特定的默认值)。 例如,以下是有效的转换:
Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding");
使用诸如CFB
和OFB
模式,块密码可以以比密码的实际块大OFB
单位加密数据。 当请求这样的模式时,您可以通过将该号码追加到“DES/CFB8/NoPadding
”和“DES/OFB32/PKCS5Padding
”转换中所示的模式名称来指定要一次处理的位数。 如果没有指定此类号码,则使用特定于提供者的默认值。 (例如,SunJCE提供程序对DES使用默认值为64位)。因此,通过使用诸如CFB8或OFB8之类的8位模式,块密码可以转换为面向字节的流密码。诸如使用关联数据的认证加密(AEAD)等模式为机密数据和未加密的附加关联数据(AAD)提供真实性保证。 (有关AEAD和AAD算法(如GCM / CCM)的更多信息,请参阅RFC 5116。 )计算认证标签时可以使用机密数据和AAD数据(类似于
Mac
)。 该标签在加密期间附加到密文,并在解密后进行验证。AEAD模式如GCM / CCM在开始密文真实性计算之前执行所有的AAD真实性计算。 为了避免必须在内部缓冲器的密文实施方案中,所有数据AAD必须提供给GCM / CCM的实现(经由
updateAAD
方法)密文被处理之前 (通过update
种doFinal
方法)。注意,GCM模式对于使用给定密钥加密的IV具有唯一性要求。 当GCM加密重复IVs时,这些用法将遭受伪造攻击。 因此,在使用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); ...
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
-
-
Field Summary
Fields Modifier and Type Field 描述 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
常数用于将密码初始化为密钥包装模式。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 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)
给定输入长度为inputLen
(以字节为单位),返回输出缓冲区需要保存下一个update
或doFinal
操作的结果的字节长度。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
常数用于将密码初始化为加密模式。- 另请参见:
- Constant Field Values
-
DECRYPT_MODE
public static final int DECRYPT_MODE
常数用于将密码初始化为解密模式。- 另请参见:
- Constant Field Values
-
WRAP_MODE
public static final int WRAP_MODE
常数用于将密码初始化为密钥包装模式。- 另请参见:
- Constant Field Values
-
UNWRAP_MODE
public static final int UNWRAP_MODE
常数用于将密码初始化为密钥解包模式。- 另请参见:
- Constant Field Values
-
PUBLIC_KEY
public static final int PUBLIC_KEY
用于指示待解除密钥的常数是“公钥”。- 另请参见:
- Constant Field Values
-
PRIVATE_KEY
public static final int PRIVATE_KEY
用于指示要解除密钥的常数是“私钥”。- 另请参见:
- Constant Field Values
-
SECRET_KEY
public static final int SECRET_KEY
用于指示要解开的密钥的常数是“密钥”。- 另请参见:
- Constant Field Values
-
-
方法详细信息
-
getInstance
public static final Cipher getInstance(String transformation) throws NoSuchAlgorithmException, NoSuchPaddingException
返回实现指定转换的Cipher
对象。此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个Provider中封装CipherSpi实现的新Cipher对象。
请注意,可以通过
Security.getProviders()
方法检索注册提供商的列表。- Implementation Note:
-
JDK参考实现另外使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供者顺序。 这可能与Security.getProviders()
返回的提供商的顺序不同。 - 参数
-
transformation
- 转换的名称,例如DES / 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
对象。返回从指定提供程序封装CipherSpi实现的新Cipher对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,注册提供商的列表可以通过
Security.getProviders()
方法检索。- 参数
-
transformation
- 转换的名称,例如DES / 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
- 转换的名称,例如DES / CBC / PKCS5Padding 。 有关标准转换名称的信息,请参阅Java Security Standard Algorithm Names Specification中的“密码”部分。 -
provider
- 提供商。 - 结果
- 一个实现请求的转换的密码
- 异常
-
IllegalArgumentException
- 如果provider
是null
-
NoSuchAlgorithmException
- 如果transformation
为null
,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)
给定输入长度为inputLen
(以字节为单位),返回输出缓冲区需要保存下一个update
或doFinal
操作的结果的字节长度。此呼叫考虑了来自以前的
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
的值,对以下四个操作之一进行密码初始化:加密,解密,密钥包装或密钥解opmode
。如果此密码需要不能从给定的
key
导出的任何算法参数,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密或密钥包装,以及提出一个InvalidKeyException
如果它被初始化解密或密钥解包。 可以使用getParameters
或getIV
(如果参数为IV)检索生成的参数。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),则将使用最高优先级安装的提供者的
SecureRandom
实现作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 关键 - 异常
-
InvalidKeyException
- 如果给定的密钥InvalidKeyException
初始化该密码,或者需要不能从给定密钥确定的算法参数,或者给定的密钥具有超过最大允许密钥大小的密钥大小(从配置的管辖区策略文件确定) 。 -
UnsupportedOperationException
- 如果opmode
是WRAP_MODE
或UNWRAP_MODE
但是模式不是由底层的CipherSpi
实现的。
-
init
public final void init(int opmode, Key key, SecureRandom random) throws InvalidKeyException
用密钥和随机源初始化此密码。根据
opmode
的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode
。如果此密码需要不能从给定的
key
导出的任何算法参数,则底层加密实现应该自动生成所需参数(使用提供者特定的默认值或随机值),如果它被初始化为加密或密钥包装,以及如果正在初始化解密或密钥解包,请提出一个InvalidKeyException
。 可以使用getParameters
或getIV
(如果参数为IV)检索生成的参数。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从
random
得到它们。请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 加密密钥 -
random
- 随机性的来源 - 异常
-
InvalidKeyException
- 如果给定的密钥InvalidKeyException
初始化该密码,或者需要不能从给定密钥确定的算法参数,或者如果给定密钥具有超过最大允许密钥大小的密钥大小(从配置的管辖区策略文件确定) 。 -
UnsupportedOperationException
- 如果opmode
是WRAP_MODE
或UNWRAP_MODE
但是模式不是由底层的CipherSpi
实现的。
-
init
public final void init(int opmode, Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException
使用密钥和一组算法参数初始化此密码。根据
opmode
的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode
。如果此密码需要任何算法参数,并且
params
为null,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果正在初始化加密或密钥包装,并提出一个InvalidAlgorithmParameterException
if正在为解密或密钥解包进行初始化。 生成的参数可以使用getParameters
或getIV
(如果参数为IV)检索。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),则将使用最高优先级安装的提供者的
SecureRandom
实现作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 加密密钥 -
params
- 算法参数 - 异常
-
InvalidKeyException
- 如果给定的密钥不适用于初始化此密码,或者其keysize超过最大允许密钥大小(从配置的管辖区策略文件确定)。 -
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
的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode
。如果此密码需要任何算法参数,并且
params
为null,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密或密钥包装,并提出一个InvalidAlgorithmParameterException
if正在为解密或密钥解包进行初始化。 可以使用getParameters
或getIV
(如果参数为IV)检索生成的参数。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从
random
获得。请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 加密密钥 -
params
- 算法参数 -
random
- 随机性的来源 - 异常
-
InvalidKeyException
- 如果给定的密钥不适合初始化此密码,或者其keysize超过了最大允许密钥大小(从配置的管辖区策略文件确定)。 -
InvalidAlgorithmParameterException
- 如果给定的算法参数不适合该密码,或者该密码需要算法参数,并且params
为空,或者给定的算法参数意味着超过合法限制(从配置的管辖区策略文件确定)的加密强度。 -
UnsupportedOperationException
- 如果opmode
是WRAP_MODE
或UNWRAP_MODE
但是模式不是由底层的CipherSpi
实现的。
-
init
public final void init(int opmode, Key key, AlgorithmParameters params) throws InvalidKeyException, InvalidAlgorithmParameterException
使用密钥和一组算法参数初始化此密码。根据
opmode
的值,为以下四个操作之一初始化加密:加密,解密,密钥包装或密钥解opmode
。如果此密码需要任何算法参数,并且
params
为null,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果正在初始化加密或密钥包装,并提出一个InvalidAlgorithmParameterException
if正在为解密或密钥解包进行初始化。 生成的参数可以使用getParameters
或getIV
(如果参数为IV)检索。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将使用最高优先级安装的提供商的
SecureRandom
实现作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 加密密钥 -
params
- 算法参数 - 异常
-
InvalidKeyException
- 如果给定的密钥不适合初始化此密码,或者其keysize超过允许的最大密钥大小(根据配置的管辖区策略文件确定)。 -
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
的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode
。如果此密码需要任何算法参数,并且
params
为null,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密或密钥包装,并提出一个InvalidAlgorithmParameterException
if正在为解密或密钥解包进行初始化。 可以使用getParameters
或getIV
(如果参数为IV)检索生成的参数。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从
random
获得。请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
key
- 加密密钥 -
params
- 算法参数 -
random
- 随机性的来源 - 异常
-
InvalidKeyException
- 如果给定的密钥不适合初始化此密码,或者其keysize超过了允许的最大密钥大小(从配置的管辖区策略文件中确定)。 -
InvalidAlgorithmParameterException
-如果给定的算法参数不适合此cipher,或此cipher要求使用算法参数和params
为空,或者给定的算法参数所含的加密强度将超过法律限制(由已配置的仲裁策略文件确定)。 -
UnsupportedOperationException
- 如果opmode
是WRAP_MODE
或UNWRAP_MODE
但是模式不是由底层的CipherSpi
实现的。
-
init
public final void init(int opmode, Certificate certificate) throws InvalidKeyException
使用给定证书中的公钥初始化此密码。根据
opmode
的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode
。如果证书是类型X.509,并且密钥使用扩展字段被标记为关键,并且密钥使用扩展字段的值意味着证书中的公钥及其相应的私钥不应被用于操作代表
opmode
的值,一个InvalidKeyException
被抛出。如果该密码需要任何不能从给定证书中的公开密钥导出的算法参数,则底层密码实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密,密钥包装,并提出一个
InvalidKeyException
如果正在初始化解密或密钥解包。 可以使用getParameters
或getIV
(如果参数为IV)检索生成的参数。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),则将使用最高优先级安装的提供者的
SecureRandom
实现作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的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
的值,为以下四个操作之一初始化加密:加密,解密,密钥包装或密钥解opmode
。如果证书是类型X.509,并且密钥使用扩展字段被标记为关键,并且密钥使用扩展字段的值意味着证书中的公钥及其相应的私钥不应被用于操作由
opmode
,抛出InvalidKeyException
。如果该密码需要在给定的
certificate
不能从公钥中导出的任何算法参数,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密,密钥包装,并提出一个InvalidKeyException
如果它被初始化解密或密钥解包。 生成的参数可以使用getParameters
或getIV
(如果参数为IV)检索。如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。
如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从
random
获得。请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。
- 参数
-
opmode
-此cipher的操作模式(这是下列之一:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
或UNWRAP_MODE
) -
certificate
- 证书 -
random
- 随机的来源 - 异常
-
InvalidKeyException
- 如果给定证书中的公钥不适合初始化该密码,或者该密码需要不能根据给定证书中的公开密钥确定算法参数,或给定证书中公开密钥的keyize具有密钥长度超过最大允许密钥大小(由配置的管辖区策略文件确定)。 -
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
不是有效的转换,即以“算法”或“算法/模式/填充”的形式。 - 从以下版本开始:
- 1.5
-
getMaxAllowedParameterSpec
public static final AlgorithmParameterSpec getMaxAllowedParameterSpec(String transformation) throws NoSuchAlgorithmException
返回一个AlgorithmParameterSpec对象,该对象包含根据管辖区策略文件的最大密码参数值。 如果安装了JCE无限制权限策略文件,或策略文件中指定转换的参数没有最大限制,则返回null。- 参数
-
transformation
- 密码转换。 - 结果
- 一个保存最大值的AlgorithmParameterSpec或null。
- 异常
-
NullPointerException
- 如果transformation
为空。 -
NoSuchAlgorithmException
- 如果transformation
不是有效的转换,即以“算法”或“算法/模式/填充”的形式。 - 从以下版本开始:
- 1.5
-
updateAAD
public final void updateAAD(byte[] src)
继续进行附加认证数据(AAD)的多部分更新。当使用AEAD(GCM / CCM)等模式运行时,调用此方法可以为密码提供AAD。 如果此密码在GCM或CCM模式下运行,则必须在密文开始操作之前(通过
update
和doFinal
方法)提供所有AAD。- 参数
-
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模式下运行,则必须在密文开始操作之前(通过
update
和doFinal
方法)提供所有AAD。- 参数
-
src
- 包含AAD的缓冲区 -
offset
- 其中AAD输入开始的src
中的偏移量 -
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模式下运行,则必须在密文开始操作之前(通过
update
和doFinal
方法)提供所有AAD。所有
src.remaining()
起始字节src.position()
被处理。 返回时,输入缓冲区的位置将等于其限制; 其限制将不会改变。- 参数
-
src
- 包含AAD的缓冲区 - 异常
-
IllegalArgumentException
- 如果src ByteBuffer
为空 -
IllegalStateException
- 如果此密码处于错误状态(例如,尚未初始化),则不接受AAD,或者如果在GCM或CCM模式下运行,并且已经为update
方法之一调用了主动加密/解密操作 -
UnsupportedOperationException
-如果在相应的方法CipherSpi
尚未覆盖的实现 - 从以下版本开始:
- 1.7
-
-