public abstract class CipherSpi extends Object
Cipher类。在这个类中的所有的抽象方法必须实现由每个密码服务提供商,谁希望提供一个特定的密码算法的实现。
为了创造Cipher实例,它将这CipherSpi类的一个实例,应用程序调用一个类的Cipher发动机的getInstance工厂方法和指定请求的转型。可选地,应用程序还可以指定提供者的名称。
一个转型是一个字符串,描述操作(或一组操作)进行给定的输入,产生输出。变换总是包括一个加密算法(例如,辅)的名称,并可能随后由一个反馈模式和填充方案。
变换是形式:
在后一种情况下,使用该模式和填充方案的特定默认值)。例如,下面是一个有效的转换:
密码C =密码。getInstance(DES CBC / pkcs5padding /”);
一个供应商可以为算法/模式/填充每个组合提供一个单独的类,或者决定提供更通用的类子变换对应算法或算法/模式或算法/填充(注意双斜线),在这种情况下,被请求的方式和/或填充的Cipher的getInstance方法自动设置,其中援引供应商的子类的方法和engineSetPadding CipherSpi engineSetMode。
在供应商主类的一个Cipher属性可能有下列格式之一:
/ /供应商的子类的“cipherspi”实现“algname”/ /可插拔的方式和填充Cipher.algname/ /供应商的子类的“cipherspi”实现“algname”在//指定的“模式”,可插拔的填充Cipher.algname /模式/ /供应商的子类的“cipherspi”实现“algname”与//指定的“填充”,以可插拔的方式Cipher.algname /填充/ /供应商的子类的“cipherspi”实现“algname”与/ /指定的“模式”和“填充”Cipher.algname /模式/填充例如,一个供应商可以提供CipherSpi实现DES /欧洲央行/ pkcs5padding的子类,一个实现了DES CBC / pkcs5padding /,一个实现了DES /循环/ pkcs5padding,然而另一个实现DES / B / pkcs5padding。供应商将有以下的大师班Cipher性质:
Cipher.des /欧洲央行/ pkcs5paddingCipher.des CBC / pkcs5padding /Cipher.des /循环/ pkcs5paddingCipher.des / B / pkcs5padding另一个供应商可以实现上述各模式类(即,一个班一个欧洲央行,CBC,一循环流化床锅炉,和一个B),一类为pkcs5padding,和一个通用的DES类,子类CipherSpi。供应商将有以下的大师班Cipher性质:
Cipher.des该Cipher引擎类的getInstance工厂方法遵循这些规则以实例化CipherSpi提供者的实现一个转换的形式”算法”:
CipherSpi子类为指定的“算法”。如果答案是肯定的,实例化这个类,其模式和填充方案的默认值(由供应商提供)的使用。
如果答案是否定的,把一NoSuchAlgorithmException例外。
的getInstance工厂方法的Cipher引擎类遵循这些规则以实例化CipherSpi提供者的实现一个转换的形式”算法/模式/填充”:
CipherSpi子类为指定的“算法/模式/填充”转型。如果答案是肯定的,实例化。
如果答案是不,去下一步。
CipherSpi子变换”算法/模式”。如果答案是肯定的,实例化,并调用engineSetPadding(padding)在新实例。
如果答案是不,去下一步。
CipherSpi子变换”算法/填充”(注意双斜杠)。如果答案是肯定的,实例化,并调用engineSetMode(mode)在新实例。
如果答案是不,去下一步。
CipherSpi子变换”算法”。如果答案是肯定的,实例化,并调用engineSetMode(mode)和engineSetPadding(padding)在新实例。
如果答案是否定的,把一NoSuchAlgorithmException例外。
KeyGenerator,
SecretKey
| Constructor and Description |
|---|
CipherSpi() |
| Modifier and Type | Method and Description |
|---|---|
protected abstract byte[] |
engineDoFinal(byte[] input, int inputOffset, int inputLen)
在一个单一的部分操作加密或解密数据,或完成一个多部分操作。
|
protected abstract int |
engineDoFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
在一个单一的部分操作加密或解密数据,或完成一个多部分操作。
|
protected int |
engineDoFinal(ByteBuffer input, ByteBuffer output)
在一个单一的部分操作加密或解密数据,或完成一个多部分操作。
|
protected abstract int |
engineGetBlockSize()
返回块大小(以字节为单位)。
|
protected abstract byte[] |
engineGetIV()
返回一个新的缓冲区中的初始化向量(四)。
|
protected int |
engineGetKeySize(Key key)
返回给定的密钥对象的密钥大小。
|
protected abstract int |
engineGetOutputSize(int inputLen)
返回的字节长度,输出缓冲区将需要为了保持结果的下一
update或
doFinal操作,
inputLen给定输入长度(以字节为单位)。
|
protected abstract AlgorithmParameters |
engineGetParameters()
返回此密码所使用的参数。
|
protected abstract void |
engineInit(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random)
一个关键的初始化这个密码,一组算法参数,和一个随机源。
|
protected abstract void |
engineInit(int opmode, Key key, AlgorithmParameters params, SecureRandom random)
一个关键的初始化这个密码,一组算法参数,和一个随机源。
|
protected abstract void |
engineInit(int opmode, Key key, SecureRandom random)
用钥匙和随机源初始化这个密码。
|
protected abstract void |
engineSetMode(String mode)
设置此密码的模式。
|
protected abstract void |
engineSetPadding(String padding)
设置此密码的填充机制。
|
protected Key |
engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType)
打开先前包的关键。
|
protected abstract byte[] |
engineUpdate(byte[] input, int inputOffset, int inputLen)
继续一个多部分加密或解密操作(取决于这个密码是如何初始化的),处理另一个数据部分。
|
protected abstract int |
engineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
继续一个多部分加密或解密操作(取决于这个密码是如何初始化的),处理另一个数据部分。
|
protected int |
engineUpdate(ByteBuffer input, ByteBuffer output)
继续一个多部分加密或解密操作(取决于这个密码是如何初始化的),处理另一个数据部分。
|
protected void |
engineUpdateAAD(byte[] src, int offset, int len)
继续一个附加的认证数据的多部分更新(AAD),使用所提供的缓冲区的一个子集。
|
protected void |
engineUpdateAAD(ByteBuffer src)
继续一个附加的认证数据的多部分更新(AAD)。
|
protected byte[] |
engineWrap(Key key)
包钥匙。
|
protected abstract void engineSetMode(String mode) throws NoSuchAlgorithmException
mode -密码模式
NoSuchAlgorithmException -如果要求加密模式不存在
protected abstract void engineSetPadding(String padding) throws NoSuchPaddingException
padding -填充机制
NoSuchPaddingException -如果要求填充机制不存在
protected abstract int engineGetBlockSize()
protected abstract int engineGetOutputSize(int inputLen)
update或
doFinal操作,
inputLen给定输入长度(以字节为单位)。
这叫考虑任何未处理(缓冲)从以前的update电话,数据填充,和AEAD标注。
第二update或doFinal称实际输出的长度可以小于由该方法返回的长度。
inputLen -输入长度(以字节为单位)
protected abstract byte[] engineGetIV()
这是有用的在加密或解密密码的情况下,在四是从用户提供的密码。
protected abstract AlgorithmParameters engineGetParameters()
返回的参数可能是相同的,用于初始化这个密码,或可能包含默认值和随机参数值的组合使用的基本密码实现,如果这个密码需要算法参数,但没有初始化。
protected abstract void engineInit(int opmode,
Key key,
SecureRandom random)
throws InvalidKeyException
密码是以下四个操作:加密、解密、密钥初始化包装或重点展开,根据opmode价值。
如果这个密码要求任何算法的参数不能被来自给定的key,底层的密码体制的实现应该是生成所需的参数本身(使用提供程序特定的默认或随机值)如果被加密或钥匙包初始化,和提高InvalidKeyException如果它被初始化为解密或重点展开。生成的参数可以使用engineGetParameters或engineGetIV检索(如果该参数是一个四)。
如果这个密码需要算法参数,不能来自输入参数,有没有合理的供应商特定的默认值,初始化将必然失败。
如果这个密码(包括其潜在的反馈或填充方案)要求任意字节(例如,参数代),它将从random让他们。
请注意,当一个密码对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化密码相当于创建密码和初始化一个新的实例。
opmode -这个密码的操作模式(这是下列之一:
ENCRYPT_MODE,
DECRYPT_MODE,
WRAP_MODE或
UNWRAP_MODE)
key -加密密钥
random -随机源
InvalidKeyException -如果给定的关键是初始化这个密码不合适,或者要求算法参数不能从给定的键确定。
UnsupportedOperationException -如果
opmode是
WRAP_MODE或
UNWRAP_MODE不是通过密码实现。
protected abstract void engineInit(int opmode,
Key key,
AlgorithmParameterSpec params,
SecureRandom random)
throws InvalidKeyException,
InvalidAlgorithmParameterException
密码是以下四个操作:加密、解密、密钥初始化包装或重点展开,根据opmode价值。
如果需要任何密码算法参数和params是空的,底层的密码体制的实现应该是生成所需的参数本身(使用提供程序特定的默认或随机值)如果被加密或钥匙包初始化,和提高InvalidAlgorithmParameterException如果它被初始化为解密或重点展开。生成的参数可以使用engineGetParameters或engineGetIV检索(如果该参数是一个四)。
如果这个密码需要算法参数,不能来自输入参数,有没有合理的供应商特定的默认值,初始化将必然失败。
如果这个密码(包括其潜在的反馈或填充方案)要求任意字节(例如,参数代),它将从random让他们。
请注意,当一个密码对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化密码相当于创建密码和初始化一个新的实例。
opmode -这个密码的操作模式(这是下列之一:
ENCRYPT_MODE,
DECRYPT_MODE,
WRAP_MODE或
UNWRAP_MODE)
key -加密密钥
params -算法参数
random -随机源
InvalidKeyException -如果给定的关键是初始化这个密码不合适
InvalidAlgorithmParameterException -如果给定的算法参数,这个密码是不适当的,或如果该密码需要算法参数和
params是空的。
UnsupportedOperationException -如果
opmode是
WRAP_MODE或
UNWRAP_MODE不是通过密码实现。
protected abstract void engineInit(int opmode,
Key key,
AlgorithmParameters params,
SecureRandom random)
throws InvalidKeyException,
InvalidAlgorithmParameterException
密码是以下四个操作:加密、解密、密钥初始化包装或重点展开,根据opmode价值。
如果需要任何密码算法参数和params是空的,底层的密码体制的实现应该是生成所需的参数本身(使用提供程序特定的默认或随机值)如果被加密或钥匙包初始化,和提高InvalidAlgorithmParameterException如果它被初始化为解密或重点展开。生成的参数可以使用engineGetParameters或engineGetIV检索(如果该参数是一个四)。
如果这个密码需要算法参数,不能来自输入参数,有没有合理的供应商特定的默认值,初始化将必然失败。
如果这个密码(包括其潜在的反馈或填充方案)要求任意字节(例如,参数代),它将从random让他们。
请注意,当一个密码对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化密码相当于创建密码和初始化一个新的实例。
opmode -这个密码的操作模式(这是下列之一:
ENCRYPT_MODE,
DECRYPT_MODE,
WRAP_MODE或
UNWRAP_MODE)
key -加密密钥
params -算法参数
random -随机源
InvalidKeyException -如果给定的关键是初始化这个密码不合适
InvalidAlgorithmParameterException -如果给定的算法参数,这个密码是不适当的,或如果该密码需要算法参数和
params是空的。
UnsupportedOperationException -如果
opmode是
WRAP_MODE或
UNWRAP_MODE不是通过密码实现。
protected abstract byte[] engineUpdate(byte[] input,
int inputOffset,
int inputLen)
在input缓冲第一inputLen字节,从inputOffset包容,进行处理,其结果是存储在一个新的缓冲区。
input -输入缓冲区
inputOffset -
input那里开始输入偏移
inputLen -输入长度
protected abstract int engineUpdate(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws ShortBufferException
在input缓冲第一inputLen字节,从inputOffset包容,进行处理,并将结果存储在output缓冲,从outputOffset包容。
如果output缓冲太小装不下的结果,一个ShortBufferException抛出。
input -输入缓冲区
inputOffset -
input那里开始输入偏移
inputLen -输入长度
output -结果缓冲区
outputOffset -抵消
output哪里结果存储
output字节数
ShortBufferException如果给定的输出缓冲区太小,保存结果
protected int engineUpdate(ByteBuffer input, ByteBuffer output) throws ShortBufferException
所有的input.remaining()字节开始input.position()处理。结果存储在输出缓冲区中。返回时,输入缓冲区的位置将等于它的极限,它的限制将不会改变。输出缓冲区的位置将有先进的N,其中N是通过这种方法返回的值,输出缓冲区的限制将不会改变。
如果output.remaining()字节不够坚持的结果,一个ShortBufferException抛出。
子类应该考虑重写此方法,如果他们能更有效地比过程字节缓冲区的字节数组。
input -输入ByteBuffer
output -输出ByteByffer
output字节数
ShortBufferException -如果在输出缓冲区没有足够的空间
NullPointerException如果任一参数是
null
protected abstract byte[] engineDoFinal(byte[] input,
int inputOffset,
int inputLen)
throws IllegalBlockSizeException,
BadPaddingException
在input缓冲第一inputLen字节,从inputOffset包容,这可能是一update缓冲操作,在任何输入的字节处理,与填充(如果要求)的应用。如果一个失效模式如GCM / CCM正在使用,认证标签附加在加密的情况下,或在解密的情况下验证。结果存储在一个新的缓冲区中。
完成,这个方式将这个密码对象时的状态通过电话engineInit先前初始化。那就是,对象是复位和可加密或解密(取决于被指定在调用engineInit运营模式)更多的数据。
注:如果抛出任何异常,这个密码对象可能需要重置之前,它可以再次使用。
input -输入缓冲区
inputOffset -
input那里开始输入偏移
inputLen -输入长度
IllegalBlockSizeException -如果这密码是一种分组密码,无填料已要求(仅在加密模式),以及数据处理的这一密码输入总长度不是块大小的倍数;或如果该加密算法无法处理输入数据的提供。
BadPaddingException -如果这密码解密模式,和(联合国)填充已提出要求,但解密后的数据不通过适当的填充字节界
AEADBadTagException -如果这密码解密的失效模式(如GCM / CCM),和接收的认证标签计算值不匹配
protected abstract int engineDoFinal(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws ShortBufferException,
IllegalBlockSizeException,
BadPaddingException
在input缓冲第一inputLen字节,从inputOffset包容,这可能是一update缓冲操作,在任何输入的字节处理,与填充(如果要求)的应用。如果一个失效模式如GCM / CCM正在使用,认证标签附加在加密的情况下,或在解密的情况下验证。结果存储在output缓冲,从outputOffset包容。
如果output缓冲太小装不下的结果,一个ShortBufferException抛出。
完成,这个方式将这个密码对象时的状态通过电话engineInit先前初始化。那就是,对象是复位和可加密或解密(取决于被指定在调用engineInit运营模式)更多的数据。
注:如果抛出任何异常,这个密码对象可能需要重置之前,它可以再次使用。
input -输入缓冲区
inputOffset -
input那里开始输入偏移
inputLen -输入长度
output -结果缓冲区
outputOffset -抵消
output哪里结果存储
output字节数
IllegalBlockSizeException -如果这密码是一种分组密码,无填料已要求(仅在加密模式),以及数据处理的这一密码输入总长度不是块大小的倍数;或如果该加密算法无法处理输入数据的提供。
ShortBufferException如果给定的输出缓冲区太小,保存结果
BadPaddingException -如果这密码解密模式,和(联合国)填充已提出要求,但解密后的数据不通过适当的填充字节界
AEADBadTagException -如果这密码解密的失效模式(如GCM / CCM),和接收的认证标签计算值不匹配
protected int engineDoFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
所有的input.remaining()字节开始input.position()处理。如果一个失效模式如GCM / CCM正在使用,认证标签附加在加密的情况下,或在解密的情况下验证。结果存储在输出缓冲区中。返回时,输入缓冲区的位置将等于它的极限,它的限制将不会改变。输出缓冲区的位置将有先进的N,其中N是通过这种方法返回的值,输出缓冲区的限制将不会改变。
如果output.remaining()字节不够坚持的结果,一个ShortBufferException抛出。
完成,这个方式将这个密码对象时的状态通过电话engineInit先前初始化。那就是,对象是复位和可加密或解密(取决于被指定在调用engineInit运营模式)更多的数据。
注:如果抛出任何异常,这个密码对象可能需要重置之前,它可以再次使用。
子类应该考虑重写此方法,如果他们能更有效地比过程字节缓冲区的字节数组。
input -输入ByteBuffer
output -输出ByteByffer
output字节数
IllegalBlockSizeException -如果这密码是一种分组密码,无填料已要求(仅在加密模式),以及数据处理的这一密码输入总长度不是块大小的倍数;或如果该加密算法无法处理输入数据的提供。
ShortBufferException -如果在输出缓冲区没有足够的空间
BadPaddingException -如果这密码解密模式,和(联合国)填充已提出要求,但解密后的数据不通过适当的填充字节界
AEADBadTagException -如果这密码解密的失效模式(如GCM / CCM),和接收的认证标签计算值不匹配
NullPointerException如果任一参数是
null
protected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException
这种具体方法已被添加到这个以前定义的抽象类。(为了向后兼容,它不能是抽象的。)可能会被供应商包装的关键。这样一个覆盖将抛出一个illegalblocksizeexception或invalidkeyexception(指定的情况下),如果给定的键不能用。如果这种方法不能被重写,它总是抛出UnsupportedOperationException。
key -被包裹的关键。
IllegalBlockSizeException -如果这密码是一种分组密码,无填料一直要求和编码的关键是包的长度不是块大小的倍数。
InvalidKeyException -如果它与这个密码将密钥是不可能的或不安全的(例如,一个硬件保护的关键是通过一个软件密码)。
UnsupportedOperationException -如果不支持这个方法。
protected Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException
这种具体方法已被添加到这个以前定义的抽象类。(为了向后兼容,它不能是抽象的。)可能会被供应商打开先前包的关键。这样一个覆盖将抛出一个invalidkeyexception如果给定密钥无法打开包裹。如果这种方法不能被重写,它总是抛出UnsupportedOperationException。
wrappedKey -被解开的关键。
wrappedKeyAlgorithm与包裹键相关的算法。
wrappedKeyType -包装的主要类型。这是一个
SECRET_KEY,
PRIVATE_KEY,或
PUBLIC_KEY。
NoSuchAlgorithmException -如果没有安装商可以创建的
wrappedKeyAlgorithm型
wrappedKeyType键。
InvalidKeyException -如果
wrappedKey并不代表包重点为
wrappedKeyAlgorithm型
wrappedKeyType。
UnsupportedOperationException -如果不支持这个方法。
protected int engineGetKeySize(Key key) throws InvalidKeyException
这种具体方法已被添加到这个以前定义的抽象类。它抛出一个UnsupportedOperationException如果不是由提供程序重写。
key的关键对象。
InvalidKeyException -如果
key无效。
protected void engineUpdateAAD(byte[] src,
int offset,
int len)
调用此方法提供、密码等方式认证加密操作时(GCM / CCM)。如果这个密码是在GCM和CCM模式操作,必须提供所有与在开始操作的密文(通过update和doFinal方法)。
src AAD的缓冲
offset -
src在AAD开始输入偏移
len - AAD的字节数
IllegalStateException -如果这个密码是错误的状态(例如,尚未初始化),不接受AAD,或者如果在GCM和CCM模式的一个
update方法已被称为主动的加密/解密操作
UnsupportedOperationException -如果这个方法没有被重写的实现
protected void engineUpdateAAD(ByteBuffer src)
调用此方法提供、密码等方式认证加密操作时(GCM / CCM)。如果这个密码是在GCM和CCM模式操作,必须提供所有与在开始操作的密文(通过update和doFinal方法)。
所有的src.remaining()字节开始src.position()处理。返回时,输入缓冲区的位置将等于它的极限,它的限制将不会改变。
src AAD的缓冲
IllegalStateException -如果这个密码是错误的状态(例如,尚未初始化),不接受AAD,或者如果在GCM和CCM模式的一个
update方法已被称为主动的加密/解密操作
UnsupportedOperationException -如果这个方法没有被重写的实现
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.