public class Cipher
extends Object
java.lang.Object | |
↳ | javax.crypto.Cipher |
Known Direct Subclasses |
这个类提供了用于加密和解密的加密密码的功能。 它构成了Java密码扩展(JCE)框架的核心。
为了创建Cipher对象,应用程序调用Cipher的getInstance
方法,并将所请求的变换的名称传递给它。 或者,可以指定提供者的名称。
转换是一个字符串,用于描述要在给定输入上执行的操作(或一组操作),以生成一些输出。 转换总是包括加密算法的名称(例如, DES ),并且可能后跟反馈模式和填充方案。
转型的形式是:
(在后一种情况下,使用模式和填充方案的提供者特定默认值)。 例如,以下是有效的转换:
Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding");Using modes such as
CFB
and
OFB
, block ciphers can encrypt data in units smaller than the cipher's actual block size. When requesting such a mode, you may optionally specify the number of bits to be processed at a time by appending this number to the mode name as shown in the "
DES/CFB8/NoPadding
" and "
DES/OFB32/PKCS5Padding
" transformations. If no such number is specified, a provider-specific default is used. (For example, the SunJCE provider uses a default of 64 bits for DES.) Thus, block ciphers can be turned into byte-oriented stream ciphers by using an 8 bit mode such as CFB8 or OFB8.
诸如使用关联数据的认证加密(AEAD)等模式为未加密的机密数据和附加关联数据(AAD)提供真实性保证。 (有关AEAD和AEAD算法(如GCM / CCM)的更多信息,请参阅RFC 5116。 )计算认证标签时可以使用机密数据和AAD数据(类似于Mac
)。 该标签在加密期间被附加到密文,并且在解密时被验证。
诸如GCM / CCM之类的AEAD模式在开始密文真实性计算之前执行所有AAD真实性计算。 为了避免必须在内部缓冲器的密文实施方案中,所有数据AAD必须提供给GCM / CCM的实现(经由updateAAD
方法)密文被处理之前 (通过update
种doFinal
方法)。
GCMParameterSpec s = new GCMParameterSpec(...); cipher.init(..., s); // If the GCMParameterSpec is needed again cipher.getParameters().getParameterSpec(GCMParameterSpec.class)); cipher.updateAAD(...); // AAD cipher.update(...); // Multi-part update cipher.doFinal(...); // conclusion of operation
Android提供了以下 Cipher
转换:
Name | Supported (API Levels) |
---|---|
AES/CBC/ISO10126Padding | 1+ |
AES/CBC/NoPadding | 1+ |
AES/CBC/PKCS5Padding | 1+ |
AES/CFB/ISO10126Padding | 1+ |
AES/CFB/NoPadding | 1+ |
AES/CFB/PKCS5Padding | 1+ |
AES/CTR/ISO10126Padding | 1+ |
AES/CTR/NoPadding | 1+ |
AES/CTR/PKCS5Padding | 1+ |
AES/CTS/ISO10126Padding | 1+ |
AES/CTS/NoPadding | 1+ |
AES/CTS/PKCS5Padding | 1+ |
AES/ECB/ISO10126Padding | 1+ |
AES/ECB/NoPadding | 1+ |
AES/ECB/PKCS5Padding | 1+ |
AES/OFB/ISO10126Padding | 1+ |
AES/OFB/NoPadding | 1+ |
AES/OFB/PKCS5Padding | 1+ |
ARCFOUR/ECB/NoPadding | 10+ |
BLOWFISH/CBC/ISO10126Padding | 10+ |
BLOWFISH/CBC/NoPadding | 10+ |
BLOWFISH/CBC/PKCS5Padding | 10+ |
BLOWFISH/CFB/ISO10126Padding | 10+ |
BLOWFISH/CFB/NoPadding | 10+ |
BLOWFISH/CFB/PKCS5Padding | 10+ |
BLOWFISH/CTR/ISO10126Padding | 10+ |
BLOWFISH/CTR/NoPadding | 10+ |
BLOWFISH/CTR/PKCS5Padding | 10+ |
BLOWFISH/CTS/ISO10126Padding | 10+ |
BLOWFISH/CTS/NoPadding | 10+ |
BLOWFISH/CTS/PKCS5Padding | 10+ |
BLOWFISH/ECB/ISO10126Padding | 10+ |
BLOWFISH/ECB/NoPadding | 10+ |
BLOWFISH/ECB/PKCS5Padding | 10+ |
BLOWFISH/OFB/ISO10126Padding | 10+ |
BLOWFISH/OFB/NoPadding | 10+ |
BLOWFISH/OFB/PKCS5Padding | 10+ |
DES/CBC/ISO10126Padding | 1+ |
DES/CBC/NoPadding | 1+ |
DES/CBC/PKCS5Padding | 1+ |
DES/CFB/ISO10126Padding | 1+ |
DES/CFB/NoPadding | 1+ |
DES/CFB/PKCS5Padding | 1+ |
DES/CTR/ISO10126Padding | 1+ |
DES/CTR/NoPadding | 1+ |
DES/CTR/PKCS5Padding | 1+ |
DES/CTS/ISO10126Padding | 1+ |
DES/CTS/NoPadding | 1+ |
DES/CTS/PKCS5Padding | 1+ |
DES/ECB/ISO10126Padding | 1+ |
DES/ECB/NoPadding | 1+ |
DES/ECB/PKCS5Padding | 1+ |
DES/OFB/ISO10126Padding | 1+ |
DES/OFB/NoPadding | 1+ |
DES/OFB/PKCS5Padding | 1+ |
DESede/CBC/ISO10126Padding | 1+ |
DESede/CBC/NoPadding | 1+ |
DESede/CBC/PKCS5Padding | 1+ |
DESede/CFB/ISO10126Padding | 1+ |
DESede/CFB/NoPadding | 1+ |
DESede/CFB/PKCS5Padding | 1+ |
DESede/CTR/ISO10126Padding | 1+ |
DESede/CTR/NoPadding | 1+ |
DESede/CTR/PKCS5Padding | 1+ |
DESede/CTS/ISO10126Padding | 1+ |
DESede/CTS/NoPadding | 1+ |
DESede/CTS/PKCS5Padding | 1+ |
DESede/ECB/ISO10126Padding | 1+ |
DESede/ECB/NoPadding | 1+ |
DESede/ECB/PKCS5Padding | 1+ |
DESede/OFB/ISO10126Padding | 1+ |
DESede/OFB/NoPadding | 1+ |
DESede/OFB/PKCS5Padding | 1+ |
PBEwithMD5andDES/CBC/ISO10126Padding | 1+ |
PBEwithMD5andDES/CBC/NoPadding | 1+ |
PBEwithMD5andDES/CBC/PKCS5Padding | 1+ |
PBEwithMD5andDES/CFB/ISO10126Padding | 1+ |
PBEwithMD5andDES/CFB/NoPadding | 1+ |
PBEwithMD5andDES/CFB/PKCS5Padding | 1+ |
PBEwithMD5andDES/CTR/ISO10126Padding | 1+ |
PBEwithMD5andDES/CTR/NoPadding | 1+ |
PBEwithMD5andDES/CTR/PKCS5Padding | 1+ |
PBEwithMD5andDES/CTS/ISO10126Padding | 1+ |
PBEwithMD5andDES/CTS/NoPadding | 1+ |
PBEwithMD5andDES/CTS/PKCS5Padding | 1+ |
PBEwithMD5andDES/ECB/ISO10126Padding | 1+ |
PBEwithMD5andDES/ECB/NoPadding | 1+ |
PBEwithMD5andDES/ECB/PKCS5Padding | 1+ |
PBEwithMD5andDES/OFB/ISO10126Padding | 1+ |
PBEwithMD5andDES/OFB/NoPadding | 1+ |
PBEwithMD5andDES/OFB/PKCS5Padding | 1+ |
PBEwithSHA1andDESede/CBC/ISO10126Padding | 1+ |
PBEwithSHA1andDESede/CBC/NoPadding | 1+ |
PBEwithSHA1andDESede/CBC/PKCS5Padding | 1+ |
PBEwithSHA1andDESede/CFB/ISO10126Padding | 1+ |
PBEwithSHA1andDESede/CFB/NoPadding | 1+ |
PBEwithSHA1andDESede/CFB/PKCS5Padding | 1+ |
PBEwithSHA1andDESede/CTR/ISO10126Padding | 1+ |
PBEwithSHA1andDESede/CTR/NoPadding | 1+ |
PBEwithSHA1andDESede/CTR/PKCS5Padding | 1+ |
PBEwithSHA1andDESede/CTS/ISO10126Padding | 1+ |
PBEwithSHA1andDESede/CTS/NoPadding | 1+ |
PBEwithSHA1andDESede/CTS/PKCS5Padding | 1+ |
PBEwithSHA1andDESede/ECB/ISO10126Padding | 1+ |
PBEwithSHA1andDESede/ECB/NoPadding | 1+ |
PBEwithSHA1andDESede/ECB/PKCS5Padding | 1+ |
PBEwithSHA1andDESede/OFB/ISO10126Padding | 1+ |
PBEwithSHA1andDESede/OFB/NoPadding | 1+ |
PBEwithSHA1andDESede/OFB/PKCS5Padding | 1+ |
RC4/ECB/NoPadding | 10+ |
RSA/ECB/NoPadding | 1+ |
RSA/ECB/OAEPPadding | 1+ |
RSA/ECB/OAEPwithSHA-1andMGF1Padding | 10+ |
RSA/ECB/OAEPwithSHA-256andMGF1Padding | 10+ |
RSA/ECB/PKCS1Padding | 1+ |
RSA/NONE/NoPadding | 1+ |
RSA/NONE/OAEPPadding | 1+ |
RSA/NONE/OAEPwithSHA-1andMGF1Padding | 10+ |
RSA/NONE/OAEPwithSHA-256andMGF1Padding | 10+ |
RSA/NONE/PKCS1Padding | 1+ |
也可以看看:
Constants |
|
---|---|
int |
DECRYPT_MODE 常用于将密码初始化为解密模式。 |
int |
ENCRYPT_MODE 常用于将密码初始化为加密模式。 |
int |
PRIVATE_KEY 用于指示待解包密钥的常量是“私钥”。 |
int |
PUBLIC_KEY 用于指示待解包密钥的常量是“公钥”。 |
int |
SECRET_KEY 用于指示待解包密钥的常量是“密钥”。 |
int |
UNWRAP_MODE 常量用于将密码初始化为密钥解开模式。 |
int |
WRAP_MODE 用于将密码初始化为密钥包装模式的常量。 |
Protected constructors |
|
---|---|
Cipher(CipherSpi cipherSpi, Provider provider, String transformation) 创建一个密码对象。 |
Public methods |
|
---|---|
final int |
doFinal(byte[] input, int inputOffset, int inputLen, byte[] output) 在单部分操作中加密或解密数据,或完成多部分操作。 |
final int |
doFinal(byte[] output, int outputOffset) 完成多部分加密或解密操作,具体取决于此密码的初始化方式。 |
final byte[] |
doFinal() 完成多部分加密或解密操作,具体取决于此密码的初始化方式。 |
final byte[] |
doFinal(byte[] input) 在单部分操作中加密或解密数据,或完成多部分操作。 |
final int |
doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) 在单部分操作中加密或解密数据,或完成多部分操作。 |
final int |
doFinal(ByteBuffer input, ByteBuffer output) 在单部分操作中加密或解密数据,或完成多部分操作。 |
final byte[] |
doFinal(byte[] input, int inputOffset, int inputLen) 在单部分操作中加密或解密数据,或完成多部分操作。 |
final String |
getAlgorithm() 返回此 |
final int |
getBlockSize() 返回块大小(以字节为单位)。 |
final ExemptionMechanism |
getExemptionMechanism() 返回与此密码一起使用的豁免机制对象。 |
final byte[] |
getIV() 返回新缓冲区中的初始化向量(IV)。 |
static final Cipher |
getInstance(String transformation) 返回实现指定转换的 |
static final Cipher |
getInstance(String transformation, String provider) 返回实现指定转换的 |
static final Cipher |
getInstance(String transformation, Provider provider) 返回实现指定转换的 |
static final int |
getMaxAllowedKeyLength(String transformation) 根据安装的JCE辖区策略文件返回指定转换的最大密钥长度。 |
static final AlgorithmParameterSpec |
getMaxAllowedParameterSpec(String transformation) 根据辖区策略文件返回包含最大密码参数值的AlgorithmParameterSpec对象。 |
final int |
getOutputSize(int inputLen) 给定输入长度 |
final AlgorithmParameters |
getParameters() 返回此密码使用的参数。 |
final Provider |
getProvider() 返回此 |
final void |
init(int opmode, Key key, AlgorithmParameters params) 使用密钥和一组算法参数初始化此密码。 |
final void |
init(int opmode, Certificate certificate, SecureRandom random) 使用来自给定证书的公钥和随机源初始化此密码。 |
final void |
init(int opmode, Key key, SecureRandom random) 用密钥和随机源初始化此密码。 |
final void |
init(int opmode, Key key, AlgorithmParameterSpec params) 使用密钥和一组算法参数初始化此密码。 |
final void |
init(int opmode, Key key) 使用密钥初始化此密码。 |
final void |
init(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) 使用密钥,一组算法参数和一个随机源初始化此密码。 |
final void |
init(int opmode, Certificate certificate) 使用给定证书中的公钥初始化此密码。 |
final void |
init(int opmode, Key key, AlgorithmParameters params, SecureRandom random) 使用密钥,一组算法参数和一个随机源初始化此密码。 |
final Key |
unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) 打开以前包装的密钥。 |
final byte[] |
update(byte[] input) 继续进行多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。 |
final int |
update(byte[] input, int inputOffset, int inputLen, byte[] output) 继续进行多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。 |
final byte[] |
update(byte[] input, int inputOffset, int inputLen) 继续进行多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。 |
final int |
update(ByteBuffer input, ByteBuffer output) 继续进行多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。 |
final int |
update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) 继续进行多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。 |
final void |
updateAAD(byte[] src, int offset, int len) 使用提供的缓冲区的子集继续多部分更新附加验证数据(AAD)。 |
final void |
updateAAD(ByteBuffer src) 继续更新附加验证数据(AAD)。 |
final void |
updateAAD(byte[] src) 继续更新附加验证数据(AAD)。 |
final byte[] |
wrap(Key key) 包裹一把钥匙。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
Cipher (CipherSpi cipherSpi, Provider provider, String transformation)
创建一个密码对象。
Parameters | |
---|---|
cipherSpi |
CipherSpi : the delegate |
provider |
Provider : the provider |
transformation |
String : the transformation |
int doFinal (byte[] input, int inputOffset, int inputLen, byte[] output)
在单部分操作中加密或解密数据,或完成多部分操作。 数据被加密或解密,取决于这个密码是如何初始化的。
第一inputLen
字节在input
缓冲区中,从inputOffset
以下,并且可能在上一次期间已缓存的任何输入字节update
操作,进行处理,填充(如果要求)被施加。 如果使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在output
缓冲区中。
如果output
缓冲区太小而无法保留结果, ShortBufferException
抛出ShortBufferException
。 在这种情况下,使用更大的输出缓冲区重复此调用。 使用getOutputSize
来确定输出缓冲区应该有多大。
完成后,此方法将此密码对象重置为之前通过调用init
初始化时的状态。 也就是说,该对象被重置并可用于加密或解密(取决于调用init
时指定的操作模式)更多数据。
注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
注意:此方法应该是复制安全的,这意味着 input
和 output
缓冲区可以引用相同的字节数组,并且在结果复制到输出缓冲区时不会覆盖未处理的输入数据。
Parameters | |
---|---|
input |
byte : the input buffer |
inputOffset |
int : the offset in input where the input starts |
inputLen |
int : the input length |
output |
byte : the buffer for the result |
Returns | |
---|---|
int |
the number of bytes stored in output |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
IllegalBlockSizeException |
if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size; or if this encryption algorithm is unable to process the input data provided. |
ShortBufferException |
if the given output buffer is too small to hold the result |
BadPaddingException |
if this cipher is in decryption mode, and (un)padding has been requested, but the decrypted data is not bounded by the appropriate padding bytes |
AEADBadTagException |
if this cipher is decrypting in an AEAD mode (such as GCM/CCM), and the received authentication tag does not match the calculated value |
int doFinal (byte[] output, int outputOffset)
完成多部分加密或解密操作,具体取决于此密码的初始化方式。
处理前一个update
操作期间可能已缓冲的输入数据,并应用填充(如果请求)。 如果使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在output
缓冲区中,从outputOffset
开始。
如果output
缓冲区太小而无法保存结果, ShortBufferException
抛出ShortBufferException
。 在这种情况下,使用更大的输出缓冲区重复此调用。 使用getOutputSize
来确定输出缓冲区应该有多大。
完成后,此方法将此密码对象重置为之前通过调用init
初始化时的状态。 也就是说,该对象被重置并可用于加密或解密(取决于调用init
时指定的操作模式)更多数据。
注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
Parameters | |
---|---|
output |
byte : the buffer for the result |
outputOffset |
int : the offset in output where the result is stored |
Returns | |
---|---|
int |
the number of bytes stored in output |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
IllegalBlockSizeException |
if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size; or if this encryption algorithm is unable to process the input data provided. |
ShortBufferException |
if the given output buffer is too small to hold the result |
BadPaddingException |
if this cipher is in decryption mode, and (un)padding has been requested, but the decrypted data is not bounded by the appropriate padding bytes |
AEADBadTagException |
if this cipher is decrypting in an AEAD mode (such as GCM/CCM), and the received authentication tag does not match the calculated value |
byte[] doFinal ()
完成多部分加密或解密操作,具体取决于此密码的初始化方式。
处理前一个update
操作期间可能已缓冲的输入数据,并应用填充(如果需要)。 如果使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在新的缓冲区中。
完成后,此方法将此密码对象重置为之前通过调用init
初始化时的状态。 也就是说,该对象被重置并可用于加密或解密(取决于调用init
时指定的操作模式)更多数据。
注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
Returns | |
---|---|
byte[] |
the new buffer with the result |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
IllegalBlockSizeException |
if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size; or if this encryption algorithm is unable to process the input data provided. |
BadPaddingException |
if this cipher is in decryption mode, and (un)padding has been requested, but the decrypted data is not bounded by the appropriate padding bytes |
AEADBadTagException |
if this cipher is decrypting in an AEAD mode (such as GCM/CCM), and the received authentication tag does not match the calculated value |
byte[] doFinal (byte[] input)
在单部分操作中加密或解密数据,或完成多部分操作。 数据被加密或解密,取决于这个密码是如何初始化的。
处理input
缓冲区中的字节以及可能在前一个update
操作期间缓冲的任何输入字节,并应用填充(如果需要)。 如果使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在新的缓冲区中。
完成后,此方法将此密码对象重置为之前通过调用init
初始化时的状态。 也就是说,该对象被重置并可用于加密或解密(取决于调用init
时指定的操作模式)更多数据。
注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
Parameters | |
---|---|
input |
byte : the input buffer |
Returns | |
---|---|
byte[] |
the new buffer with the result |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
IllegalBlockSizeException |
if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size; or if this encryption algorithm is unable to process the input data provided. |
BadPaddingException |
if this cipher is in decryption mode, and (un)padding has been requested, but the decrypted data is not bounded by the appropriate padding bytes |
AEADBadTagException |
if this cipher is decrypting in an AEAD mode (such as GCM/CCM), and the received authentication tag does not match the calculated value |
int doFinal (byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
在单部分操作中加密或解密数据,或完成多部分操作。 数据被加密或解密,取决于这个密码是如何初始化的。
第一inputLen
字节在input
缓冲区中,从inputOffset
以下,并且可能在上一次期间已缓存的任何输入字节update
操作,进行处理,填充(如果要求)被施加。 如果使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在output
缓冲区中,从outputOffset
含)开始。
如果output
缓冲区太小而无法保存结果, ShortBufferException
抛出ShortBufferException
。 在这种情况下,使用更大的输出缓冲区重复此调用。 使用getOutputSize
来确定输出缓冲区应该有多大。
完成后,此方法将此密码对象重置为之前通过调用init
初始化时的状态。 也就是说,该对象被重置并可用于加密或解密(取决于调用init
时指定的操作模式)更多数据。
注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
注意:此方法应该是复制安全的,这意味着 input
和 output
缓冲区可以引用相同的字节数组,并且在结果复制到输出缓冲区时不会覆盖未处理的输入数据。
Parameters | |
---|---|
input |
byte : the input buffer |
inputOffset |
int : the offset in input where the input starts |
inputLen |
int : the input length |
output |
byte : the buffer for the result |
outputOffset |
int : the offset in output where the result is stored |
Returns | |
---|---|
int |
the number of bytes stored in output |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
IllegalBlockSizeException |
if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size; or if this encryption algorithm is unable to process the input data provided. |
ShortBufferException |
if the given output buffer is too small to hold the result |
BadPaddingException |
if this cipher is in decryption mode, and (un)padding has been requested, but the decrypted data is not bounded by the appropriate padding bytes |
AEADBadTagException |
if this cipher is decrypting in an AEAD mode (such as GCM/CCM), and the received authentication tag does not match the calculated value |
int doFinal (ByteBuffer input, ByteBuffer output)
在单部分操作中加密或解密数据,或完成多部分操作。 数据被加密或解密,取决于这个密码是如何初始化的。
所有input.remaining()
起始字节input.position()
被处理。 如果使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在输出缓冲区中。 返回时,输入缓冲区的位置将等于它的限制; 其限制不会改变。 输出缓冲区的位置将前进n,其中n是此方法返回的值; 输出缓冲区的限制不会改变。
如果output.remaining()
字节不足以保存结果,则抛出ShortBufferException
。 在这种情况下,使用更大的输出缓冲区重复此调用。 使用getOutputSize
来确定输出缓冲区应该有多大。
完成后,此方法将此密码对象重置为之前通过调用init
初始化时的状态。 也就是说,该对象被重置并可用于加密或解密(取决于调用init
时指定的操作模式)更多数据。
注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
注意:此方法应该是复制安全的,这意味着 input
和 output
缓冲区可以引用相同的字节数组,并且在结果复制到输出缓冲区时不会覆盖未处理的输入数据。
Parameters | |
---|---|
input |
ByteBuffer : the input ByteBuffer |
output |
ByteBuffer : the output ByteBuffer |
Returns | |
---|---|
int |
the number of bytes stored in output |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
IllegalArgumentException |
if input and output are the same object |
ReadOnlyBufferException |
if the output buffer is read-only |
IllegalBlockSizeException |
if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size; or if this encryption algorithm is unable to process the input data provided. |
ShortBufferException |
if there is insufficient space in the output buffer |
BadPaddingException |
if this cipher is in decryption mode, and (un)padding has been requested, but the decrypted data is not bounded by the appropriate padding bytes |
AEADBadTagException |
if this cipher is decrypting in an AEAD mode (such as GCM/CCM), and the received authentication tag does not match the calculated value |
byte[] doFinal (byte[] input, int inputOffset, int inputLen)
在单部分操作中加密或解密数据,或完成多部分操作。 数据被加密或解密,取决于这个密码是如何初始化的。
第一inputLen
字节在input
缓冲区中,从inputOffset
以下,并且可能在上一次期间已缓存的任何输入字节update
操作,进行处理,填充(如果要求)被施加。 如果使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证。 结果存储在新的缓冲区中。
完成后,此方法会将此密码对象重置为之前通过调用init
初始化时的状态。 也就是说,该对象被重置并可用于加密或解密(取决于调用init
时指定的操作模式)更多数据。
注意:如果抛出任何异常,则可能需要重置此密码对象才能再次使用它。
Parameters | |
---|---|
input |
byte : the input buffer |
inputOffset |
int : the offset in input where the input starts |
inputLen |
int : the input length |
Returns | |
---|---|
byte[] |
the new buffer with the result |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
IllegalBlockSizeException |
if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size; or if this encryption algorithm is unable to process the input data provided. |
BadPaddingException |
if this cipher is in decryption mode, and (un)padding has been requested, but the decrypted data is not bounded by the appropriate padding bytes |
AEADBadTagException |
if this cipher is decrypting in an AEAD mode (such as GCM/CCM), and the received authentication tag does not match the calculated value |
String getAlgorithm ()
返回此 Cipher
对象的算法名称。
这是创建此 Cipher
对象的 getInstance
调用之一中指定的同一名称。
Returns | |
---|---|
String |
the algorithm name of this Cipher object. |
int getBlockSize ()
返回块大小(以字节为单位)。
Returns | |
---|---|
int |
the block size (in bytes), or 0 if the underlying algorithm is not a block cipher |
ExemptionMechanism getExemptionMechanism ()
返回与此密码一起使用的豁免机制对象。
Returns | |
---|---|
ExemptionMechanism |
the exemption mechanism object used with this cipher, or null if this cipher does not use any exemption mechanism. |
byte[] getIV ()
返回新缓冲区中的初始化向量(IV)。
在创建随机IV的情况下,或者在基于密码的加密或解密的情况下,IV是从用户提供的密码导出的情况下,这非常有用。
Returns | |
---|---|
byte[] |
the initialization vector in a new buffer, or null if the underlying algorithm does not use an IV, or if the IV has not yet been set. |
Cipher getInstance (String transformation)
返回实现指定转换的 Cipher
对象。
该方法遍历注册安全提供程序的列表,从最优先的提供程序开始。 返回一个新的Cipher对象,该对象封装来自支持指定算法的第一个Provider的CipherSpi实现。
请注意,注册供应商列表可能通过 Security.getProviders()
方法检索。
Parameters | |
---|---|
transformation |
String : the name of the transformation, e.g., DES/CBC/PKCS5Padding. See the Cipher section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard transformation names. |
Returns | |
---|---|
Cipher |
a cipher that implements the requested transformation. |
Throws | |
---|---|
NoSuchAlgorithmException |
if transformation is null, empty, in an invalid format, or if no Provider supports a CipherSpi implementation for the specified algorithm. |
NoSuchPaddingException |
if transformation contains a padding scheme that is not available. |
也可以看看:
Cipher getInstance (String transformation, String provider)
返回实现指定转换的 Cipher
对象。
返回封装指定提供程序的CipherSpi实现的新Cipher对象。 指定的提供者必须在安全提供者列表中注册。
请注意,注册供应商列表可能通过 Security.getProviders()
方法检索。
Parameters | |
---|---|
transformation |
String : the name of the transformation, e.g., DES/CBC/PKCS5Padding. See the Cipher section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard transformation names. |
provider |
String : the name of the provider. |
Returns | |
---|---|
Cipher |
a cipher that implements the requested transformation. |
Throws | |
---|---|
NoSuchAlgorithmException |
if transformation is null, empty, in an invalid format, or if a CipherSpi implementation for the specified algorithm is not available from the specified provider. |
NoSuchProviderException |
if the specified provider is not registered in the security provider list. |
NoSuchPaddingException |
if transformation contains a padding scheme that is not available. |
IllegalArgumentException |
if the provider is null or empty. |
也可以看看:
Cipher getInstance (String transformation, Provider provider)
返回实现指定转换的 Cipher
对象。
返回封装指定Provider对象的CipherSpi实现的新Cipher对象。 请注意,指定的Provider对象不必在提供程序列表中注册。
Parameters | |
---|---|
transformation |
String : the name of the transformation, e.g., DES/CBC/PKCS5Padding. See the Cipher section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard transformation names. |
provider |
Provider : the provider. |
Returns | |
---|---|
Cipher |
a cipher that implements the requested transformation. |
Throws | |
---|---|
NoSuchAlgorithmException |
if transformation is null, empty, in an invalid format, or if a CipherSpi implementation for the specified algorithm is not available from the specified Provider object. |
NoSuchPaddingException |
if transformation contains a padding scheme that is not available. |
IllegalArgumentException |
if the provider is null. |
也可以看看:
int getMaxAllowedKeyLength (String transformation)
根据安装的JCE辖区策略文件返回指定转换的最大密钥长度。 如果安装了JCE无限强度管辖权策略文件,则返回Integer.MAX_VALUE。 有关JCE辖区策略文件中默认密钥大小的更多信息,请参阅Java Cryptography Architecture Reference Guide中的附录E.
Parameters | |
---|---|
transformation |
String : the cipher transformation. |
Returns | |
---|---|
int |
the maximum key length in bits or Integer.MAX_VALUE. |
Throws | |
---|---|
NullPointerException |
if transformation is null. |
NoSuchAlgorithmException |
if transformation is not a valid transformation, i.e. in the form of "algorithm" or "algorithm/mode/padding". |
AlgorithmParameterSpec getMaxAllowedParameterSpec (String transformation)
根据辖区策略文件返回包含最大密码参数值的AlgorithmParameterSpec对象。 如果安装了JCE无限强度管辖权策略文件,或者策略文件中指定转换的参数没有最大限制,则将返回null。
Parameters | |
---|---|
transformation |
String : the cipher transformation. |
Returns | |
---|---|
AlgorithmParameterSpec |
an AlgorithmParameterSpec which holds the maximum value or null. |
Throws | |
---|---|
NullPointerException |
if transformation is null. |
NoSuchAlgorithmException |
if transformation is not a valid transformation, i.e. in the form of "algorithm" or "algorithm/mode/padding". |
int getOutputSize (int inputLen)
给定输入长度 inputLen
(以字节为单位),返回输出缓冲区需要保留下一个 update
或 doFinal
操作结果 inputLen
的字节长度。
此调用考虑到来自先前的 update
调用,填充和AEAD标记的任何未处理(缓冲)的数据。
下一个 update
或 doFinal
调用的实际输出长度可能小于此方法返回的长度。
Parameters | |
---|---|
inputLen |
int : the input length (in bytes) |
Returns | |
---|---|
int |
the required output buffer size (in bytes) |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not yet been initialized) |
AlgorithmParameters getParameters ()
返回此密码使用的参数。
返回的参数可能与用于初始化此密码的参数相同,或者如果此密码需要算法参数但未用任何初始值进行初始化,则可能包含底层密码实现使用的默认参数值和随机参数值的组合。
Returns | |
---|---|
AlgorithmParameters |
the parameters used with this cipher, or null if this cipher does not use any parameters. |
Provider getProvider ()
返回此 Cipher
对象的提供者。
Returns | |
---|---|
Provider |
the provider of this Cipher object |
void init (int opmode, Key key, AlgorithmParameters params)
使用密钥和一组算法参数初始化此密码。
密码初始化为以下四种操作之一:加密,解密,密钥打包或密钥解包,具体取决于 opmode
的值。
如果此密码需要任何算法参数,并且params
为空,则假定基础密码实现本身(使用特定于提供者的默认值或随机值)自动生成所需参数(如果它正在初始化用于加密或密钥包装),并且引发InvalidAlgorithmParameterException
if它正在被初始化用于解密或密钥解包。 生成的参数可以使用getParameters
或getIV
(如果参数是IV)来检索。
如果此密码需要不能从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将使用最高优先级的安装提供程序的
实现作为随机源。 (如果没有安装的提供商提供SecureRandom的实现,则将使用系统提供的随机源。)SecureRandom
请注意,当Cipher对象初始化时,它会丢失所有先前获取的状态。 换句话说,初始化密码就相当于创建该密码的一个新实例并对其进行初始化。
Parameters | |
---|---|
opmode |
int : the operation mode of this cipher (this is one of the following: ENCRYPT_MODE , DECRYPT_MODE , WRAP_MODE or UNWRAP_MODE ) |
key |
Key : the encryption key |
params |
AlgorithmParameters : the algorithm parameters |
Throws | |
---|---|
InvalidKeyException |
if the given key is inappropriate for initializing this cipher, or its keysize exceeds the maximum allowable keysize (as determined from the configured jurisdiction policy files). |
InvalidAlgorithmParameterException |
if the given algorithm parameters are inappropriate for this cipher, or this cipher requires algorithm parameters and params is null, or the given algorithm parameters imply a cryptographic strength that would exceed the legal limits (as determined from the configured jurisdiction policy files). |
void init (int opmode, Certificate certificate, SecureRandom random)
使用来自给定证书的公钥和随机源初始化此密码。
密码初始化为以下四种操作之一:加密,解密,密钥打包或密钥解包,具体取决于 opmode
的值。
如果证书的类型为X.509,并且 密钥使用扩展字段标记为 关键字 ,并且 密钥使用扩展字段的值意味着证书中的公钥和其相应的私钥不应用于由 opmode
的值表示的操作, InvalidKeyException
被抛出。
如果此密码要求任何算法参数无法从给定的certificate
公钥中派生出来,那么底层密码实现应该自己生成所需的参数(使用特定于提供者的默认值或随机值),如果它正在初始化用于加密或密钥包装,并且如果正在初始化用于解密或密钥解包,则引发InvalidKeyException
。 生成的参数可以使用getParameters
或getIV
(如果参数是IV)来检索。
如果此密码需要不能从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将从 random
获得它们。
请注意,当Cipher对象初始化时,它会丢失所有先前获取的状态。 换句话说,初始化密码就相当于创建该密码的一个新实例并对其进行初始化。
Parameters | |
---|---|
opmode |
int : the operation mode of this cipher (this is one of the following: ENCRYPT_MODE , DECRYPT_MODE , WRAP_MODE or UNWRAP_MODE ) |
certificate |
Certificate : the certificate |
random |
SecureRandom : the source of randomness |
Throws | |
---|---|
InvalidKeyException |
if the public key in the given certificate is inappropriate for initializing this cipher, or this cipher requires algorithm parameters that cannot be determined from the public key in the given certificate, or the keysize of the public key in the given certificate has a keysize that exceeds the maximum allowable keysize (as determined by the configured jurisdiction policy files). |
void init (int opmode, Key key, SecureRandom random)
用密钥和随机源初始化此密码。
密码初始化为以下四种操作之一:加密,解密,密钥打包或密钥解包,具体取决于 opmode
的值。
如果此密码要求任何算法参数不能从给定的key
,则底层密码实现应该自己生成所需参数(使用特定于提供者的默认值或随机值)(如果它正在初始化用于加密或密钥包装),并且如果它正在初始化用于解密或密钥解InvalidKeyException
则引发一个InvalidKeyException
。 可以使用getParameters
或getIV
(如果参数是IV)检索生成的参数。
如果此密码需要不能从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。
如果此密码(包括其基本反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从 random
获得它们。
请注意,当Cipher对象初始化时,它会丢失所有先前获取的状态。 换句话说,初始化密码就相当于创建该密码的一个新实例并对其进行初始化。
Parameters | |
---|---|
opmode |
int : the operation mode of this cipher (this is one of the following: ENCRYPT_MODE , DECRYPT_MODE , WRAP_MODE or UNWRAP_MODE ) |
key |
Key : the encryption key |
random |
SecureRandom : the source of randomness |
Throws | |
---|---|
InvalidKeyException |
if the given key is inappropriate for initializing this cipher, or requires algorithm parameters that cannot be determined from the given key, or if the given key has a keysize that exceeds the maximum allowable keysize (as determined from the configured jurisdiction policy files). |
void init (int opmode, Key key, AlgorithmParameterSpec params)
使用密钥和一组算法参数初始化此密码。
密码初始化为以下四种操作之一:加密,解密,密钥打包或密钥解包,具体取决于 opmode
的值。
如果此密码需要任何算法参数并且params
为空,则如果基础密码实现正在初始化用于加密或密钥包装,则它应该自己生成所需的参数(使用提供程序特定的默认值或随机值),并且如果此参数为InvalidAlgorithmParameterException
if它正在被初始化用于解密或密钥解包。 生成的参数可以使用getParameters
或getIV
(如果参数是IV)来检索。
如果此密码需要不能从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将使用最高优先级安装提供程序的
实现作为随机源。 (如果没有安装的提供商提供SecureRandom的实现,则将使用系统提供的随机源。)SecureRandom
请注意,当Cipher对象初始化时,它会丢失所有先前获取的状态。 换句话说,初始化密码就相当于创建该密码的一个新实例并对其进行初始化。
Parameters | |
---|---|
opmode |
int : the operation mode of this cipher (this is one of the following: ENCRYPT_MODE , DECRYPT_MODE , WRAP_MODE or UNWRAP_MODE ) |
key |
Key : the encryption key |
params |
AlgorithmParameterSpec : the algorithm parameters |
Throws | |
---|---|
InvalidKeyException |
if the given key is inappropriate for initializing this cipher, or its keysize exceeds the maximum allowable keysize (as determined from the configured jurisdiction policy files). |
InvalidAlgorithmParameterException |
if the given algorithm parameters are inappropriate for this cipher, or this cipher requires algorithm parameters and params is null, or the given algorithm parameters imply a cryptographic strength that would exceed the legal limits (as determined from the configured jurisdiction policy files). |
void init (int opmode, Key key)
使用密钥初始化此密码。
密码初始化为以下四种操作之一:加密,解密,密钥打包或密钥解包,具体取决于 opmode
的值。
如果此密码要求任何算法参数不能从给定的key
,则底层密码实现应该自己生成所需的参数(使用特定于提供者的默认值或随机值),如果它正在初始化用于加密或密钥包装,以及如果正在初始化解密或密钥解InvalidKeyException
则提出InvalidKeyException
。 生成的参数可以使用getParameters
或getIV
(如果参数是IV)来检索。
如果此密码需要不能从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将使用最高优先级安装提供程序的
实现作为随机源。 (如果没有安装的提供商提供SecureRandom的实现,则将使用系统提供的随机源。)SecureRandom
请注意,当Cipher对象初始化时,它会丢失所有先前获取的状态。 换句话说,初始化密码就相当于创建该密码的一个新实例并对其进行初始化。
Parameters | |
---|---|
opmode |
int : the operation mode of this cipher (this is one of the following: ENCRYPT_MODE , DECRYPT_MODE , WRAP_MODE or UNWRAP_MODE ) |
key |
Key : the key |
Throws | |
---|---|
InvalidKeyException |
if the given key is inappropriate for initializing this cipher, or requires algorithm parameters that cannot be determined from the given key, or if the given key has a keysize that exceeds the maximum allowable keysize (as determined from the configured jurisdiction policy files). |
void init (int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random)
使用密钥,一组算法参数和一个随机源初始化此密码。
密码初始化为以下四种操作之一:加密,解密,密钥打包或密钥解包,具体取决于 opmode
的值。
如果此密码需要任何算法参数并且params
为空,则假定基础密码实现本身(使用特定于提供者的默认值或随机值)自动生成所需参数(如果它正在初始化用于加密或密钥包装),并且引发InvalidAlgorithmParameterException
if它正在被初始化用于解密或密钥解包。 生成的参数可以使用getParameters
或getIV
(如果参数是IV)来检索。
如果此密码需要不能从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将从 random
获得它们。
请注意,当Cipher对象初始化时,它会丢失所有先前获取的状态。 换句话说,初始化密码就相当于创建该密码的一个新实例并对其进行初始化。
Parameters | |
---|---|
opmode |
int : the operation mode of this cipher (this is one of the following: ENCRYPT_MODE , DECRYPT_MODE , WRAP_MODE or UNWRAP_MODE ) |
key |
Key : the encryption key |
params |
AlgorithmParameterSpec : the algorithm parameters |
random |
SecureRandom : the source of randomness |
Throws | |
---|---|
InvalidKeyException |
if the given key is inappropriate for initializing this cipher, or its keysize exceeds the maximum allowable keysize (as determined from the configured jurisdiction policy files). |
InvalidAlgorithmParameterException |
if the given algorithm parameters are inappropriate for this cipher, or this cipher requires algorithm parameters and params is null, or the given algorithm parameters imply a cryptographic strength that would exceed the legal limits (as determined from the configured jurisdiction policy files). |
void init (int opmode, Certificate certificate)
使用给定证书中的公钥初始化此密码。
密码初始化为以下四种操作之一:加密,解密,密钥打包或密钥解包,具体取决于 opmode
的值。
如果证书的类型为X.509,并且 密钥使用扩展字段标记为 关键字 ,并且 密钥使用扩展字段的值意味着证书中的公钥和其相应的私钥不应用于由 opmode
的值表示的操作, InvalidKeyException
被抛出。
如果此密码需要任何不能从给定证书中的公钥导出的算法参数,那么如果基础密码实现正被初始化用于加密,则其本身(使用提供商特定的默认值或随机值)应该生成所需参数密钥包装,并且如果正在初始化用于解密或密钥解包,则引发InvalidKeyException
。 生成的参数可以使用getParameters
或getIV
(如果参数是IV)来检索。
如果此密码需要不能从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将使用最高优先级安装提供程序的SecureRandom
实现作为随机源。 (如果没有安装的提供商提供SecureRandom的实现,则将使用系统提供的随机源。)
请注意,当Cipher对象初始化时,它会丢失所有先前获取的状态。 换句话说,初始化密码就相当于创建该密码的一个新实例并对其进行初始化。
Parameters | |
---|---|
opmode |
int : the operation mode of this cipher (this is one of the following: ENCRYPT_MODE , DECRYPT_MODE , WRAP_MODE or UNWRAP_MODE ) |
certificate |
Certificate : the certificate |
Throws | |
---|---|
InvalidKeyException |
if the public key in the given certificate is inappropriate for initializing this cipher, or this cipher requires algorithm parameters that cannot be determined from the public key in the given certificate, or the keysize of the public key in the given certificate has a keysize that exceeds the maximum allowable keysize (as determined by the configured jurisdiction policy files). |
void init (int opmode, Key key, AlgorithmParameters params, SecureRandom random)
使用密钥,一组算法参数和一个随机源初始化此密码。
密码初始化为以下四种操作之一:加密,解密,密钥包装或密钥解包,具体取决于 opmode
的值。
如果这个密码需要任何算法参数,并且params
为空,那么底层密码实现本身应该生成所需的参数(使用提供商特定的默认值或随机值),如果它正在初始化用于加密或密钥包装,并且引发InvalidAlgorithmParameterException
if它正在被初始化用于解密或密钥解包。 生成的参数可以使用getParameters
或getIV
(如果参数是IV)来检索。
如果此密码需要不能从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。
如果此密码(包括其基础反馈或填充方案)需要任何随机字节(例如,用于参数生成),则它将从 random
获得它们。
请注意,当Cipher对象初始化时,它会丢失所有先前获取的状态。 换句话说,初始化密码就相当于创建该密码的一个新实例并对其进行初始化。
Parameters | |
---|---|
opmode |
int : the operation mode of this cipher (this is one of the following: ENCRYPT_MODE , DECRYPT_MODE , WRAP_MODE or UNWRAP_MODE ) |
key |
Key : the encryption key |
params |
AlgorithmParameters : the algorithm parameters |
random |
SecureRandom : the source of randomness |
Throws | |
---|---|
InvalidKeyException |
if the given key is inappropriate for initializing this cipher, or its keysize exceeds the maximum allowable keysize (as determined from the configured jurisdiction policy files). |
InvalidAlgorithmParameterException |
if the given algorithm parameters are inappropriate for this cipher, or this cipher requires algorithm parameters and params is null, or the given algorithm parameters imply a cryptographic strength that would exceed the legal limits (as determined from the configured jurisdiction policy files). |
Key unwrap (byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType)
打开以前包装的密钥。
Parameters | |
---|---|
wrappedKey |
byte : the key to be unwrapped. |
wrappedKeyAlgorithm |
String : the algorithm associated with the wrapped key. |
wrappedKeyType |
int : the type of the wrapped key. This must be one of SECRET_KEY , PRIVATE_KEY , or PUBLIC_KEY . |
Returns | |
---|---|
Key |
the unwrapped key. |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized). |
NoSuchAlgorithmException |
if no installed providers can create keys of type wrappedKeyType for the wrappedKeyAlgorithm . |
InvalidKeyException |
if wrappedKey does not represent a wrapped key of type wrappedKeyType for the wrappedKeyAlgorithm . |
byte[] update (byte[] input)
继续进行多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。
处理 input
缓冲区中的字节,并将结果存储在新的缓冲区中。
如果 input
的长度为零,则此方法返回 null
。
Parameters | |
---|---|
input |
byte : the input buffer |
Returns | |
---|---|
byte[] |
the new buffer with the result, or null if the underlying cipher is a block cipher and the input data is too short to result in a new block. |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
int update (byte[] input, int inputOffset, int inputLen, byte[] output)
继续进行多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。
第一 inputLen
字节在 input
缓冲区中,从 inputOffset
以下,被处理,并且结果被存储在 output
缓冲器。
如果output
缓冲区太小而无法保存结果, ShortBufferException
抛出ShortBufferException
。 在这种情况下,使用更大的输出缓冲区重复此调用。 使用getOutputSize
来确定输出缓冲区应该有多大。
如果 inputLen
为零,则此方法返回零长度。
注意:此方法应该是复制安全的,这意味着 input
和 output
缓冲区可以引用相同的字节数组,并且当结果复制到输出缓冲区时不会覆盖未处理的输入数据。
Parameters | |
---|---|
input |
byte : the input buffer |
inputOffset |
int : the offset in input where the input starts |
inputLen |
int : the input length |
output |
byte : the buffer for the result |
Returns | |
---|---|
int |
the number of bytes stored in output |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
ShortBufferException |
if the given output buffer is too small to hold the result |
byte[] update (byte[] input, int inputOffset, int inputLen)
继续进行多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。
第一 inputLen
字节在 input
缓冲区中,从 inputOffset
以下,被处理,并且结果被存储在新的缓冲器。
如果 inputLen
为零,则此方法返回 null
。
Parameters | |
---|---|
input |
byte : the input buffer |
inputOffset |
int : the offset in input where the input starts |
inputLen |
int : the input length |
Returns | |
---|---|
byte[] |
the new buffer with the result, or null if the underlying cipher is a block cipher and the input data is too short to result in a new block. |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
int update (ByteBuffer input, ByteBuffer output)
继续进行多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。
所有input.remaining()
起始字节input.position()
被处理。 结果存储在输出缓冲区中。 返回时,输入缓冲区的位置将等于它的限制; 其限制不会改变。 输出缓冲区的位置将前进n,其中n是此方法返回的值; 输出缓冲区的限制不会改变。
如果output.remaining()
字节不足以保存结果,则引发ShortBufferException
。 在这种情况下,使用更大的输出缓冲区重复此调用。 使用getOutputSize
来确定输出缓冲区应该有多大。
注意:此方法应该是复制安全的,这意味着 input
和 output
缓冲区可以引用相同的内存块,并且当结果复制到输出缓冲区时不会覆盖未处理的输入数据。
Parameters | |
---|---|
input |
ByteBuffer : the input ByteBuffer |
output |
ByteBuffer : the output ByteByffer |
Returns | |
---|---|
int |
the number of bytes stored in output |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
IllegalArgumentException |
if input and output are the same object |
ReadOnlyBufferException |
if the output buffer is read-only |
ShortBufferException |
if there is insufficient space in the output buffer |
int update (byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
继续进行多部分加密或解密操作(取决于此密码的初始化方式),处理另一个数据部分。
第一 inputLen
字节在 input
缓冲区中,从 inputOffset
以下,被处理,并且结果被存储在 output
缓冲区中,从 outputOffset
以下。
如果output
缓冲区太小而无法保存结果, ShortBufferException
抛出ShortBufferException
。 在这种情况下,使用更大的输出缓冲区重复此调用。 使用getOutputSize
来确定输出缓冲区应该有多大。
如果 inputLen
为零,则此方法返回长度为零。
注意:此方法应该是复制安全的,这意味着 input
和 output
缓冲区可以引用相同的字节数组,并且在结果复制到输出缓冲区时不会覆盖未处理的输入数据。
Parameters | |
---|---|
input |
byte : the input buffer |
inputOffset |
int : the offset in input where the input starts |
inputLen |
int : the input length |
output |
byte : the buffer for the result |
outputOffset |
int : the offset in output where the result is stored |
Returns | |
---|---|
int |
the number of bytes stored in output |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized) |
ShortBufferException |
if the given output buffer is too small to hold the result |
void updateAAD (byte[] src, int offset, int len)
使用提供的缓冲区的子集继续多部分更新附加验证数据(AAD)。
在AEAD(GCM / CCM)等模式下操作时,调用此方法可为AAD提供密码。 如果此密码以GCM或CCM模式运行,则必须在密文开始操作之前提供所有AAD(通过update
和doFinal
方法)。
Parameters | |
---|---|
src |
byte : the buffer containing the AAD |
offset |
int : the offset in src where the AAD input starts |
len |
int : the number of AAD bytes |
Throws | |
---|---|
IllegalArgumentException |
if the src byte array is null, or the offset or length is less than 0, or the sum of the offset and len is greater than the length of the src byte array |
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized), does not accept AAD, or if operating in either GCM or CCM mode and one of the update methods has already been called for the active encryption/decryption operation |
UnsupportedOperationException |
if the corresponding method in the CipherSpi has not been overridden by an implementation |
void updateAAD (ByteBuffer src)
继续更新附加验证数据(AAD)。
在AEAD(GCM / CCM)等模式下操作时,调用此方法可为AAD提供密码。 如果此密码以GCM或CCM模式运行,则必须在开始密文操作之前提供所有AAD(通过update
和doFinal
方法)。
所有src.remaining()
起始字节src.position()
被处理。 返回时,输入缓冲区的位置将等于它的限制; 其限制不会改变。
Parameters | |
---|---|
src |
ByteBuffer : the buffer containing the AAD |
Throws | |
---|---|
IllegalArgumentException |
if the src ByteBuffer is null |
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized), does not accept AAD, or if operating in either GCM or CCM mode and one of the update methods has already been called for the active encryption/decryption operation |
UnsupportedOperationException |
if the corresponding method in the CipherSpi has not been overridden by an implementation |
void updateAAD (byte[] src)
继续更新附加验证数据(AAD)。
在AEAD(GCM / CCM)等模式下操作时,调用此方法可为AAD提供密码。 如果此密码以GCM或CCM模式运行,则必须在开始密文操作之前提供所有AAD(通过update
和doFinal
方法)。
Parameters | |
---|---|
src |
byte : the buffer containing the Additional Authentication Data |
Throws | |
---|---|
IllegalArgumentException |
if the src byte array is null |
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized), does not accept AAD, or if operating in either GCM or CCM mode and one of the update methods has already been called for the active encryption/decryption operation |
UnsupportedOperationException |
if the corresponding method in the CipherSpi has not been overridden by an implementation |
byte[] wrap (Key key)
包裹一把钥匙。
Parameters | |
---|---|
key |
Key : the key to be wrapped. |
Returns | |
---|---|
byte[] |
the wrapped key. |
Throws | |
---|---|
IllegalStateException |
if this cipher is in a wrong state (e.g., has not been initialized). |
IllegalBlockSizeException |
if this cipher is a block cipher, no padding has been requested, and the length of the encoding of the key to be wrapped is not a multiple of the block size. |
InvalidKeyException |
if it is impossible or unsafe to wrap the key with this cipher (e.g., a hardware protected key is being passed to a software-only cipher). |