public abstract class Signature
extends SignatureSpi
java.lang.Object | ||
↳ | java.security.SignatureSpi | |
↳ | java.security.Signature |
Signature类用于为应用程序提供数字签名算法的功能。 数字签名用于数字数据的认证和完整性保证。
签名算法可以是使用DSA和SHA-1的NIST标准DSA。 使用SHA-1消息摘要算法的DSA算法可以指定为SHA1withDSA 。 在RSA的情况下,存在对消息多个选择摘要算法,所以签名算法可被指定为,例如,MD2withRSA,MD5withRSA,或SHA1withRSA。 算法名称必须指定,因为没有默认值。
签名对象可用于生成和验证数字签名。
有三个阶段使用Signature对象来签名数据或验证签名:
initVerify
), or initSign(PrivateKey)
and initSign(PrivateKey, SecureRandom)
). 根据初始化的类型,这将更新要签名或验证的字节。 请参阅update
方法。
sign
methods and the verify
method. 请注意,由于历史原因,此课程是抽象的,并且从SignatureSpi
延伸。 应用程序开发人员只应注意本Signature
类中定义的方法; 超类中的所有方法都适用于希望提供自己的数字签名算法实现的加密服务提供者。
Android提供了以下 Signature
算法:
Name | Supported (API Levels) |
---|---|
DSA | 1+ |
DSAwithSHA1 | 1+ |
DSS | 1–19 |
ECDSA | 11+ |
ECDSAwithSHA1 | 11+ |
MD2withRSA | 1–3 |
MD4withRSA | 1–8 |
MD5withRSA | 1+ |
MD5withRSA/ISO9796-2 | 1–8 |
NONEwithDSA | 1+ |
NONEwithECDSA | 11+ |
NONEwithRSA | 17+ |
RSASSA-PSS | 1–8 |
SHA1withDSA | 1+ |
SHA1withECDSA | 11+ |
SHA1withRSA | 1+ |
SHA1withRSA/ISO9796-2 | 1–8 |
SHA256withECDSA | 11+ |
SHA256withRSA | 1+ |
SHA384withECDSA | 11+ |
SHA384withRSA | 1+ |
SHA512withECDSA | 11+ |
SHA512withRSA | 1+ |
Constants |
|
---|---|
int |
SIGN 可能的 |
int |
UNINITIALIZED 可能的 |
int |
VERIFY 可能的值为 |
Fields |
|
---|---|
protected int |
state 此签名对象的当前状态。 |
Inherited fields |
---|
From class java.security.SignatureSpi
|
Protected constructors |
|
---|---|
Signature(String algorithm) 为指定的算法创建一个Signature对象。 |
Public methods |
|
---|---|
Object |
clone() 如果实现可复制,则返回一个克隆。 |
final String |
getAlgorithm() 返回此签名对象的算法名称。 |
static Signature |
getInstance(String algorithm) 返回实现指定签名算法的Signature对象。 |
static Signature |
getInstance(String algorithm, String provider) 返回实现指定签名算法的Signature对象。 |
static Signature |
getInstance(String algorithm, Provider provider) 返回实现指定签名算法的Signature对象。 |
final Object |
getParameter(String param) 此方法在API级别1中已弃用。已弃用。 |
final AlgorithmParameters |
getParameters() 返回与此签名对象一起使用的参数。 |
final Provider |
getProvider() 返回此签名对象的提供者。 |
final void |
initSign(PrivateKey privateKey, SecureRandom random) 初始化此对象以进行签名。 |
final void |
initSign(PrivateKey privateKey) 初始化此对象以进行签名。 |
final void |
initVerify(PublicKey publicKey) 初始化此对象以进行验证。 |
final void |
initVerify(Certificate certificate) 使用给定证书中的公钥来初始化此对象以进行验证。 |
final void |
setParameter(AlgorithmParameterSpec params) 使用指定的参数集初始化此签名引擎。 |
final void |
setParameter(String param, Object value) 此方法在API级别1中已弃用。请使用 |
final int |
sign(byte[] outbuf, int offset, int len) 完成签名操作并将结果签名字节存储在提供的缓冲区 |
final byte[] |
sign() 返回所有更新数据的签名字节。 |
String |
toString() 返回此签名对象的字符串表示形式,提供包含对象状态和所用算法名称的信息。 |
final void |
update(byte[] data) 使用指定的字节数组更新要签名或验证的数据。 |
final void |
update(byte[] data, int off, int len) 使用指定的字节数组更新要签名或验证的数据,从指定的偏移量开始。 |
final void |
update(ByteBuffer data) 使用指定的ByteBuffer更新要签名或验证的数据。 |
final void |
update(byte b) 更新要签名或通过字节验证的数据。 |
final boolean |
verify(byte[] signature, int offset, int length) 在指定的字节数组中验证传入的签名,从指定的偏移量开始。 |
final boolean |
verify(byte[] signature) 验证传入的签名。 |
Inherited methods |
|
---|---|
From class java.security.SignatureSpi
|
|
From class java.lang.Object
|
Signature (String algorithm)
为指定的算法创建一个Signature对象。
Parameters | |
---|---|
algorithm |
String : the standard string name of the algorithm. See the Signature section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard algorithm names. |
Object clone ()
如果实现可复制,则返回一个克隆。
Returns | |
---|---|
Object |
a clone if the implementation is cloneable. |
Throws | |
---|---|
CloneNotSupportedException |
if this is called on an implementation that does not support Cloneable . |
String getAlgorithm ()
返回此签名对象的算法名称。
Returns | |
---|---|
String |
the name of the algorithm for this signature object. |
Signature getInstance (String algorithm)
返回实现指定签名算法的Signature对象。
该方法遍历注册安全提供程序的列表,从最优先的提供程序开始。 返回一个新的Signature对象,该对象封装来自支持指定算法的第一个Provider的SignatureSpi实现。
请注意,注册供应商列表可能通过 Security.getProviders()
方法检索。
Parameters | |
---|---|
algorithm |
String : the standard name of the algorithm requested. See the Signature section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard algorithm names. |
Returns | |
---|---|
Signature |
the new Signature object. |
Throws | |
---|---|
NoSuchAlgorithmException |
if no Provider supports a Signature implementation for the specified algorithm. |
也可以看看:
Signature getInstance (String algorithm, String provider)
返回实现指定签名算法的Signature对象。
返回封装指定提供程序的SignatureSpi实现的新Signature对象。 指定的提供者必须在安全提供者列表中注册。
请注意,注册供应商列表可能通过 Security.getProviders()
方法检索。
Parameters | |
---|---|
algorithm |
String : the name of the algorithm requested. See the Signature section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard algorithm names. |
provider |
String : the name of the provider. |
Returns | |
---|---|
Signature |
the new Signature object. |
Throws | |
---|---|
NoSuchAlgorithmException |
if a SignatureSpi 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. |
IllegalArgumentException |
if the provider name is null or empty. |
也可以看看:
Signature getInstance (String algorithm, Provider provider)
返回实现指定签名算法的Signature对象。
返回封装指定Provider对象的SignatureSpi实现的新Signature对象。 请注意,指定的Provider对象不必在提供程序列表中注册。
Parameters | |
---|---|
algorithm |
String : the name of the algorithm requested. See the Signature section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard algorithm names. |
provider |
Provider : the provider. |
Returns | |
---|---|
Signature |
the new Signature object. |
Throws | |
---|---|
NoSuchAlgorithmException |
if a SignatureSpi implementation for the specified algorithm is not available from the specified Provider object. |
IllegalArgumentException |
if the provider is null. |
也可以看看:
Object getParameter (String param)
此方法在API级别1中已弃用。
已过时。
获取指定算法参数的值。 这种方法提供了一个通用机制,通过它可以获得这个对象的各种参数。 参数可以是算法的任何可设置参数,例如参数大小或用于签名生成的随机比特源(如果适当的话),或者是否执行特定但可选的计算的指示。 针对每个参数的统一算法特定命名方案是可取的,但此时未指定。
Parameters | |
---|---|
param |
String : the string name of the parameter. |
Returns | |
---|---|
Object |
the object that represents the parameter value, or null if there is none. |
Throws | |
---|---|
InvalidParameterException |
if param is an invalid parameter for this engine, or another exception occurs while trying to get this parameter. |
也可以看看:
AlgorithmParameters getParameters ()
返回与此签名对象一起使用的参数。
返回的参数可能与用于初始化此签名的参数相同,或者可能包含基础签名实现使用的默认和随机生成参数值的组合,如果此签名需要算法参数但未用任何初始化参数值进行初始化。
Returns | |
---|---|
AlgorithmParameters |
the parameters used with this signature, or null if this signature does not use any parameters. |
Provider getProvider ()
返回此签名对象的提供者。
Returns | |
---|---|
Provider |
the provider of this signature object |
void initSign (PrivateKey privateKey, SecureRandom random)
初始化此对象以进行签名。 如果再次使用不同的参数调用此方法,它将抵消此调用的影响。
Parameters | |
---|---|
privateKey |
PrivateKey : the private key of the identity whose signature is going to be generated. |
random |
SecureRandom : the source of randomness for this signature. |
Throws | |
---|---|
InvalidKeyException |
if the key is invalid. |
void initSign (PrivateKey privateKey)
初始化此对象以进行签名。 如果再次使用不同的参数调用此方法,它将抵消此调用的影响。
Parameters | |
---|---|
privateKey |
PrivateKey : the private key of the identity whose signature is going to be generated. |
Throws | |
---|---|
InvalidKeyException |
if the key is invalid. |
void initVerify (PublicKey publicKey)
初始化此对象以进行验证。 如果再次使用不同的参数调用此方法,它将抵消此调用的影响。
Parameters | |
---|---|
publicKey |
PublicKey : the public key of the identity whose signature is going to be verified. |
Throws | |
---|---|
InvalidKeyException |
if the key is invalid. |
void initVerify (Certificate certificate)
使用给定证书中的公钥来初始化此对象以进行验证。
如果证书的类型为X.509,并且 密钥使用扩展字段被标记为 关键字 ,并且 密钥使用扩展字段的值意味着证书中的公钥和其对应的私钥不应该用于数字签名, InvalidKeyException
被抛出。
Parameters | |
---|---|
certificate |
Certificate : the certificate of the identity whose signature is going to be verified. |
Throws | |
---|---|
InvalidKeyException |
if the public key in the certificate is not encoded properly or does not include required parameter information or cannot be used for digital signature purposes. |
void setParameter (AlgorithmParameterSpec params)
使用指定的参数集初始化此签名引擎。
Parameters | |
---|---|
params |
AlgorithmParameterSpec : the parameters |
Throws | |
---|---|
InvalidAlgorithmParameterException |
if the given parameters are inappropriate for this signature engine |
也可以看看:
void setParameter (String param, Object value)
此方法在API级别1中已弃用。
使用setParameter
。
将指定的算法参数设置为指定的值。 这种方法提供了一个通用机制,通过它可以设置这个对象的各种参数。 参数可以是算法的任何可设置参数,例如参数大小或用于签名生成的随机比特源(如果适当的话),或者是否执行特定但可选的计算的指示。 针对每个参数的统一算法特定命名方案是可取的,但此时未指定。
Parameters | |
---|---|
param |
String : the string identifier of the parameter. |
value |
Object : the parameter value. |
Throws | |
---|---|
InvalidParameterException |
if param is an invalid parameter for this signature algorithm engine, the parameter is already set and cannot be set again, a security exception occurs, and so on. |
也可以看看:
int sign (byte[] outbuf, int offset, int len)
完成签名操作并将结果签名字节存储在所提供的缓冲区outbuf
,从offset
开始。 签名的格式取决于基础签名方案。
该签名对象被重置为其初始状态(在调用 initSign
方法之后的状态)并且可以重复使用以使用相同的私钥生成进一步的签名。
Parameters | |
---|---|
outbuf |
byte : buffer for the signature result. |
offset |
int : offset into outbuf where the signature is stored. |
len |
int : number of bytes within outbuf allotted for the signature. |
Returns | |
---|---|
int |
the number of bytes placed into outbuf . |
Throws | |
---|---|
SignatureException |
if this signature object is not initialized properly, if this signature algorithm is unable to process the input data provided, or if len is less than the actual signature length. |
byte[] sign ()
返回所有更新数据的签名字节。 签名的格式取决于基础签名方案。
对此方法的调用会将此签名对象重置为之前通过调用initSign(PrivateKey)
初始化以进行签名时initSign(PrivateKey)
。 也就是说,如果需要,该对象被重置并可用于从同一个签名者生成另一个签名,通过对update
和sign
新调用。
Returns | |
---|---|
byte[] |
the signature bytes of the signing operation's result. |
Throws | |
---|---|
SignatureException |
if this signature object is not initialized properly or if this signature algorithm is unable to process the input data provided. |
String toString ()
返回此签名对象的字符串表示形式,提供包含对象状态和所用算法名称的信息。
Returns | |
---|---|
String |
a string representation of this signature object. |
void update (byte[] data)
使用指定的字节数组更新要签名或验证的数据。
Parameters | |
---|---|
data |
byte : the byte array to use for the update. |
Throws | |
---|---|
SignatureException |
if this signature object is not initialized properly. |
void update (byte[] data, int off, int len)
使用指定的字节数组更新要签名或验证的数据,从指定的偏移量开始。
Parameters | |
---|---|
data |
byte : the array of bytes. |
off |
int : the offset to start from in the array of bytes. |
len |
int : the number of bytes to use, starting at offset. |
Throws | |
---|---|
SignatureException |
if this signature object is not initialized properly. |
void update (ByteBuffer data)
使用指定的ByteBuffer更新要签名或验证的数据。 处理data.remaining()
起始处的字节data.position()
。 返回时,缓冲区的位置将等于它的极限; 其限制不会改变。
Parameters | |
---|---|
data |
ByteBuffer : the ByteBuffer |
Throws | |
---|---|
SignatureException |
if this signature object is not initialized properly. |
void update (byte b)
更新要签名或通过字节验证的数据。
Parameters | |
---|---|
b |
byte : the byte to use for the update. |
Throws | |
---|---|
SignatureException |
if this signature object is not initialized properly. |
boolean verify (byte[] signature, int offset, int length)
在指定的字节数组中验证传入的签名,从指定的偏移量开始。
对此方法的调用会将此签名对象重置为之前通过调用initVerify(PublicKey)
初始化验证时initVerify(PublicKey)
。 也就是说,该对象将被重置并可用于验证其公钥在initVerify
的调用中指定的身份的另一个签名。
Parameters | |
---|---|
signature |
byte : the signature bytes to be verified. |
offset |
int : the offset to start from in the array of bytes. |
length |
int : the number of bytes to use, starting at offset. |
Returns | |
---|---|
boolean |
true if the signature was verified, false if not. |
Throws | |
---|---|
SignatureException |
if this signature object is not initialized properly, the passed-in signature is improperly encoded or of the wrong type, if this signature algorithm is unable to process the input data provided, etc. |
IllegalArgumentException |
if the signature byte array is null, or the offset or length is less than 0, or the sum of the offset and length is greater than the length of the signature byte array. |
boolean verify (byte[] signature)
验证传入的签名。
对此方法的调用会将此签名对象重置为之前通过调用initVerify(PublicKey)
进行验证初始化时的状态。 也就是说,该对象将被重置并可用于验证在initVerify
调用中指定了公钥的身份的另一个签名。
Parameters | |
---|---|
signature |
byte : the signature bytes to be verified. |
Returns | |
---|---|
boolean |
true if the signature was verified, false if not. |
Throws | |
---|---|
SignatureException |
if this signature object is not initialized properly, the passed-in signature is improperly encoded or of the wrong type, if this signature algorithm is unable to process the input data provided, etc. |