类 java.security.Signature
java.lang.Object
|
+----java.security.Signature
- public abstract class Signature
- extends Object
Signature 用于提供数字签名算法的功能,例如 RSA 和 MD5 或者 DSA。 数字签名用于数字数据的认证和完整性保证。
象 Java 安全性中的其它基于算法的类一样,Signature 类有两个主要的组件:
- 数字签名 API ( 应用程序接口 )
- 这是需要数字签名服务的应用调用的方法的接口。 API
由所有公有方法组成。
- 数字签名 SPI ( 服务提供者接口 )
- 该接口是由提供特定算法的提供者实现的接口。它由所有名字前缀为
engine 的方法组成。 每个这样的方法由具有相应名字的公有
API 方法调用。例如,engineSign 方法由 sign
方法调用。SPI 方法是抽象的;提供者必须提供一个具体的实现。
同其它 Java 安全性中基于算法的类一样,Signature 提供了独立于实现的算法,一个调用者(应用代码)可由此申请一个特定的签名算法,并返回一个被正确初始化的 Signature 对象。如果需要的话,也可以向一个特定的提供者申请一个特定的算法。参见 getInstance 方法。
所以有两种申请 Signature 对象的方式:只指定一个算法名,或者指定一个算法名和一个包提供者。
- 如果只指定了算法名,系统将确定申请的算法是否有适用于环境的实现,是否有多个这样的实现,是否有一个是首选的。
- 如果同时指定了一个算法名和一个包提供者,系统将确定是否有申请的包中的算法的实现,如果没有将抛出一个异常。
一个 Signature 对象可以用于生成和验证数字签名。
使用 Signature 对象对数据进行签名或对签名进行验证有三个阶段:
- 用以下数据进行初始化
- 修改
根据初始化类型,它将修改被签名或验证的字节。参见 update 方法。
- 签名或验证
一个对所有修改字节的签名。参见 sign 和
verify。
变量索引
- SIGN
-
可能的 state 值,指明该签名对象为签名进行了初始化。
- state
-
该签名对象的当前状态。
- UNINITIALIZED
-
可能的 state 值,指明该签名对象还没有进行初始化。
- VERIFY
-
可能的 state 值,指明该签名对象为验证进行了初始化。
构造子索引
- Signature(String)
- 为指定的算法创建一个 Signature 对象。
方法索引
- clone()
- 如果实现是可复制的,返回一个复制。
- engineGetParameter(String)
- SPI:获得指定算法的参数值。
- engineInitSign(PrivateKey)
- SPI:用指定的私有密钥为签名操作初始化该签名对象。
- engineInitVerify(PublicKey)
- SPI:用指定的公有密钥为验证操作初始化该签名对象。
- engineSetParameter(String, Object)
- SPI:将指定的算法参数设置为指定的值。
- engineSign()
-
SPI:返回目前被修改的所有数据的签名字节。
- engineUpdate(byte)
- SPI:修改用指定的字节进行签名或验证的数据。
- engineUpdate(byte[], int, int)
- SPI:修改用起始于指定偏移量的指定数组签名或验证的数据。
- engineVerify(byte[])
-
SPI:验证传入的签名。
- getAlgorithm()
-
返回这个签名对象的算法名称。
- getInstance(String)
- 生成一个 Signature 对象,它实现指定的算法。
- getInstance(String, String)
-
生成一个实现指定算法的 Signature 对象,如果指定的提供者的算法是可用的,那么该算法由该提供者提供。
- getParameter(String)
- 获得指定算法的参数值。
- initSign(PrivateKey)
- 为签名初始化该对象。
- initVerify(PublicKey)
- 为验证初始化该对象。
- setParameter(String, Object)
- 将指定的算法参数设置为指定的值。
- sign()
- 返回所有被修改的数据的签名字节。
- toString()
- 返回该签名对象的一个字符串表示,它提供的信息包括对象的状态和使用的算法的名称。
- update(byte)
- 修改用指定的字节进行签名或验证的数据。
- update(byte[])
- 修改用指定的字节数组进行签名或验证的数据。
- update(byte[], int, int)
- 修改用指定的字节数组进行签名或验证的数据,从数组指定的偏移量开始。
- verify(byte[])
- 验证传入的签名。
变量
UNINITIALIZED
protected static final int UNINITIALIZED
- 可能的 state 值,指明该签名对象还没有进行初始化。
SIGN
protected static final int SIGN
- 可能的 state 值,指明该签名对象为签名进行了初始化。
VERIFY
protected static final int VERIFY
- 可能的 state 值,指明该签名对象为验证进行了初始化。
state
protected int state
- 该签名对象的当前状态。
构造子
Signature
protected Signature(String algorithm)
- 为指定的算法创建一个 Signature 对象。
- 参数:
- algorithm - 算法的标准字符串名。
方法
getInstance
public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException
- 生成一个 Signature 对象,它实现指定的算法。 如果缺省的提供者包包含的一个 Signature 子类实现了该算法,返回该子类的一个实例。
如果算法在缺省包中是不可用的,将搜索其它的包。
- 参数:
- algorithm - 申请的算法的标准名称。
- 返回值:
- 新建的 Signature 对象。
- 抛出:
NoSuchAlgorithmException
- 如果算法在环境中是不可用的。
getInstance
public static Signature getInstance(String algorithm,
String provider) throws NoSuchAlgorithmException, NoSuchProviderException
- 生成一个实现指定算法的 Signature 对象,如果指定的提供者的算法是可用的,那么该算法由该提供者提供。
- 参数:
- algorithm - 申请的算法的名称。
- provider - 提供者的名字。
- 返回值:
- 新建的 Signature 对象。
- 抛出:
NoSuchAlgorithmException
- 如果算法在申请的调用者提供的包中是不可用的。
- 抛出:
NoSuchProviderException
- 如果提供者在环境中是不可用的。
- 参见:
- Provider
initVerify
public final void initVerify(PublicKey publicKey) throws InvalidKeyException
- 为验证初始化该对象。 如果用不同的参数再次调用该方法,它将取消本次调用的结果。
- 参数:
- publicKey - 身份的公共密钥,将验证该身份的签名。
- 抛出:
InvalidKeyException
- 如果密钥是无效的。
initSign
public final void initSign(PrivateKey privateKey) throws InvalidKeyException
- 为签名初始化该对象。 如果用不同的参数再次调用该方法,它将取消本次调用的结果。
- 参数:
- privateKey - 身份的公共密钥,将生成该身份的签名。
- 抛出:
InvalidKeyException
- 如果密钥是无效的。
sign
public final byte[] sign() throws SignatureException
- 返回所有被修改的数据的签名字节。 返回的签名是 X.509 编码。
调用该方法将该签名算法复位成以前为签名初始化的状态,当时是通过调用 initSign(PrivateKey) 进行初始化的。即,该对象被复位,而且如果需要的话,可以通过调用 update
和 sign 方法为同一个签名者生成另一个签名。
- 返回值:
- 作为签名操作的结果的签名字节。
- 抛出:
SignatureException
- 如果没有正确地初始化该签名。
verify
public final boolean verify(byte signature[]) throws SignatureException
- 验证传入的签名。 签名字节是 X.509 编码。
调用该方法将该签名算法复位成前一次为验证初始化的状态,当时是通过调用 initVerify(PrivateKey) 进行初始化的。 即,该对象被复位,并且可以验证另一个身份的签名,该身份的公共密钥是通过调用
initVerify 指定的。
- 参数:
- signature - 要验证的签名字节。
- 返回值:
- 如果验证了签名则为 true,如果没有则为 false。
- 抛出:
SignatureException
- 如果没有正确地初始化签名对象,或者传入的签名的编码错误或类型错误。
update
public final void update(byte b) throws SignatureException
- 修改用指定的字节进行签名或验证的数据。
- 参数:
- b - 用于修改的字节。
- 抛出:
SignatureException
- 如果没有正确地初始化该签名。
update
public final void update(byte data[]) throws SignatureException
- 修改用指定的字节数组进行签名或验证的数据。
- 参数:
- data - 用于修改的字节数组。
- 抛出:
SignatureException
- 如果没有正确地初始化该签名。
update
public final void update(byte data[],
int off,
int len) throws SignatureException
- 修改用起始于指定偏移量的指定数组签名或验证的数据。
- 参数:
- data - 该字节数组。
- off - 字节数组中开始的偏移量。
- len - 从偏移量开始用的字节数。
- 抛出:
SignatureException
- 如果没有正确地初始化该签名。
getAlgorithm
public final String getAlgorithm()
- 返回这个签名对象的算法名称。
- 返回值:
- 这个签名对象的算法名称。
toString
public String toString()
- 返回该签名对象的一个字符串表示,提供的信息包括对象的状态和使用的算法的名称。
- 返回值:
- 该签名对象的字符串表示。
- 覆盖:
- 类 Object 中的 toString
setParameter
public final void setParameter(String param,
Object value) throws InvalidParameterException
- 将指定的算法参数设置为指定的值。
该方法提供了一个通用的机制,通过它可以设置该对象的不同参数。算法的参数是可以设定的,例如参数的尺寸,或用于生成签名的随机数源 ( 如果是恰当的 ),或是否执行特定的而非任意的计算的一个指示。需要一个一致的,算法特定的参数命名体系,但是现在还没有制定。
- 参数:
- param - 参数的字符串标识符。
- value - 参数值。
- 抛出:
InvalidParameterException
- 如果
param 对该签名算法引擎是一个无效的参数,或参数已经被设置,不能再次设置,或发生一个安全性异常,等等。
getParameter
public final Object getParameter(String param) throws InvalidParameterException
- 获得指定算法的参数值。 该方法提供了一个通用的机制,通过它可以获得该对象的不同参数。 一个参数可以是算法的任何可设置的参数,例如参数的尺寸,或签名生成器的随机数源 ( 如果是恰当的 ),或指明是否执行特定的而非任意的计算的一个指示。需要一个一致的,算法特定的参数命名体系,但是现在还没有制定。
- 参数:
- param - 参数的字符串名。
- 返回值:
- 表示该参数值的对象,如果没有值则为 null。
- 抛出:
InvalidParameterException
- 如果
param 对该引擎是一个无效的参数,或者当试图获得该参数时发生了另一个异常。
engineInitVerify
protected abstract void engineInitVerify(PublicKey publicKey) throws InvalidKeyException
- SPI:用指定的公有密钥为验证操作初始化该签名对象。
- 参数:
- publicKey - 身份的公共密钥,将验证该身份的签名。
- 抛出:
InvalidKeyException
- 如果密钥的编码错误,参数丢失等等。
engineInitSign
protected abstract void engineInitSign(PrivateKey privateKey) throws InvalidKeyException
- SPI:用指定的私有密钥为签名操作初始化该签名对象。
- 参数:
- privateKey - 身份的私有密钥,将生成该身份的签名。
- 抛出:
InvalidKeyException
- 如果密钥的编码错误,参数丢失等等。
engineUpdate
protected abstract void engineUpdate(byte b) throws SignatureException
- SPI:修改用指定的字节进行签名或验证的数据。
- 参数:
- b - 用于修改的字节。
- 抛出:
SignatureException
- 如果没有正确的初始化引擎。
engineUpdate
protected abstract void engineUpdate(byte b[],
int off,
int len) throws SignatureException
- SPI:修改用起始于指定偏移量的指定数组签名或验证的数据。
- 参数:
- data - 字节数组。
- off - 字节数组中开始的偏移量。
- len - 从偏移量开始使用的字节数。
- 抛出:
SignatureException
- 如果没有正确的初始化引擎。
engineSign
protected abstract byte[] engineSign() throws SignatureException
- SPI:返回目前被修改的数据的签名字节。 返回的签名是 X.509 编码。
- 返回值:
- 签名操作的结果的签名字节。
- 抛出:
SignatureException
- 如果没有正确的初始化引擎。
engineVerify
protected abstract boolean engineVerify(byte sigBytes[]) throws SignatureException
- SPI:验证传入的签名。 签名字节应是 X.509 编码。
- 参数:
- sigBytes - 要验证的签名字节。
- 返回值:
- 如果验证了签名则为 true,如果没有则为 false。
- 抛出:
SignatureException
- 如果没有正确的初始化引擎,或者传入的签名的编码错误或类型错误等。
engineSetParameter
protected abstract void engineSetParameter(String param,
Object value) throws InvalidParameterException
- SPI:将指定的算法参数设置为指定的值。 该方法提供了一个通用的机制,通过它可以设置该对象的不同参数。一个参数可以是算法任何可设置的参数,例如参数的尺寸,或用于生成签名的随机数源 ( 如果是恰当的 ),或指明是否执行特定的而非任意的计算的一个指示。 需要一个一致的,算法特定的参数命名体系,但是现在还没有制定。
- 参数:
- param - 参数的字符串标识符。
- value - 参数值。
- 抛出:
InvalidParameterException
- 如果
param 对该签名算法引擎是一个无效的参数,或参数已经被设置,不能再次设置,或发生一个安全性异常,等等。
engineGetParameter
protected abstract Object engineGetParameter(String param) throws InvalidParameterException
- SPI:获得指定算法的参数值。
该方法提供了一个通用的机制,通过它可以获得该对象的不同参数。一个参数可以是算法任何可设置的参数,例如参数的尺寸,或用于生成签名的随机数源 (
如果是恰当的 ),或指明是否执行特定的而非任意的计算的一个指示。需要一个一致的,算法特定的参数命名体系,但是现在还没有制定。
- 参数:
- param - 参数的字符串名。
- 返回值:
- 表示该参数值的对象,如果没有值则为 null。
- 抛出:
InvalidParameterException
- 如果
param 对该引擎是一个无效的参数,或者当试图获得该参数时发生了另一个异常。
clone
public Object clone() throws CloneNotSupportedException
- 如果实现是可复制的,返回一个复制。
- 返回值:
- 如果实现是可复制的则返回一个复制。
- 抛出:
CloneNotSupportedException
- 如果该方法被不支持
Cloneable 的实现调用。
- 覆盖:
- 类 Object 中的 clone