java 签名类 Signature
java.security
类 Signature
java.lang.Object

java.security.SignatureSpi

java.security.Signature
public abstract class Signatureextends SignatureSpi
此 Signature 类用来为应用程序提供数字签名算法功能。数字签名用于确保数字数据的验证和完整性。
在所有算法当中,数字签名可以是 NIST 标准的 DSA,它使用 DSA 和 SHA-1。可以将使用 SHA-1 消息摘要算法的 DSA 算法指定为 SHA1withDSA。如果使用 RSA,对消息摘要算法则会有多种选择,因此,可以将签名算法指定为 MD2withRSA、MD5withRSA 或 SHA1withRSA。因为没有默认的算法名称,所以必须为其指定名称。
Signature 对象可用来生成和验证数字签名。
使用 Signature 对象签名数据或验证签名包括以下三个阶段:
- 初始化,使用
- 初始化验证签名的公钥(请参见 initVerify),或使用
- 初始化签署签名的私钥(也可以选择“安全随机数生成器”),(请参见 initSign(PrivateKey) 和 initSign(PrivateKey, SecureRandom))。
- 更新
根据初始化类型,这可更新要签名或验证的字节。请参见 update 方法。
- 签署或验证所有更新字节的签名。请参见 sign 方法和 verify 方法。
注意,由于历史原因,此类是从 SignatureSpi 中抽象出来的,并进行了扩展。应用程序开发人员只需注意在此 Signature 类中定义的方法即可;超类中的所有方法都是供那些希望提供自己的数字签名算法实现的加密服务提供者使用的。
| 字段摘要 | |
|---|---|
protected static int |
SIGN 可能的 state 值,表示此签名对象已经初始化签名。 |
protected int |
state 此签名对象的当前状态。 |
protected static int |
UNINITIALIZED 可能的 state 值,表示尚未初始化此签名对象。 |
protected static int |
VERIFY 可能的 state 值,表示此签名对象已经初始化验证。 |
| 从类 java.security.SignatureSpi 继承的字段 |
|---|
appRandom |
| 构造方法摘要 | |
|---|---|
protected |
Signature(String algorithm) 创建指定算法的 Signature 对象。 |
| 方法摘要 | |
|---|---|
Object |
clone() 如果此实现可以复制,则返回副本。 |
String |
getAlgorithm() 返回此签名对象的算法名称。 |
static Signature |
getInstance(String algorithm) 返回实现指定签名算法的 Signature 对象。 |
static Signature |
getInstance(String algorithm, Provider provider) 返回实现指定签名算法的 Signature 对象。 |
static Signature |
getInstance(String algorithm, String provider) 返回实现指定签名算法的 Signature 对象。 |
Object |
getParameter(String param) 已过时。 |
AlgorithmParameters |
getParameters() 返回与此签名对象一起使用的参数。 |
Provider |
getProvider() 返回此签名对象的提供者。 |
void |
initSign(PrivateKey privateKey) 初始化这个用于签名的对象。 |
void |
initSign(PrivateKey privateKey, SecureRandom random) 初始化这个用于签名的对象。 |
void |
initVerify(Certificate certificate) 使用来自给定证书的公钥初始化此用于验证的对象。 |
void |
initVerify(PublicKey publicKey) 初始化此用于验证的对象。 |
void |
setParameter(AlgorithmParameterSpec params) 使用指定的参数集初始化此签名引擎。 |
void |
setParameter(String param, Object value) 已过时。 使用 setParameter 取代。 |
byte[] |
sign() 返回所有已更新数据的签名字节。 |
int |
sign(byte[] outbuf, int offset, int len) 完成签名操作并从 offset 开始,将得到的签名字节存储在提供的缓冲区 outbuf 中。 |
String |
toString() 返回此签名对象的字符串表示形式,以提供包括对象状态和所用算法名称在内的信息。 |
void |
update(byte b) 更新要由字节签名或验证的数据。 |
void |
update(byte[] data) 使用指定的 byte 数组更新要签名或验证的数据。 |
void |
update(byte[] data, int off, int len) 从指定的偏移量开始,使用指定的 byte 数组更新要签名或验证的数据。 |
void |
update(ByteBuffer data) 使用指定的 ByteBuffer 更新要签名或验证的数据。 |
boolean |
verify(byte[] signature) 验证传入的签名。 |
boolean |
verify(byte[] signature, int offset, int length) 从指定的偏移量开始,验证指定的 byte 数组中传入的签名。 |
| 从类 java.security.SignatureSpi 继承的方法 |
|---|
engineGetParameter, engineGetParameters, engineInitSign, engineInitSign, engineInitVerify, engineSetParameter, engineSetParameter, engineSign, engineSign, engineUpdate, engineUpdate, engineUpdate, engineVerify, engineVerify |
| 从类 java.lang.Object 继承的方法 |
|---|
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| 字段详细信息 |
|---|
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- 算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
| 方法详细信息 |
|---|
getInstance
public static Signature getInstance(String algorithm)
throws NoSuchAlgorithmException
- 返回实现指定签名算法的 Signature 对象。
此方法从首选的提供者开始遍历已注册安全提供者列表。返回封装 SignatureSpi 实现的新 Signature 对象,该实现取自第一个支持指定算法的 Provider。
注意,可以通 Security.getProviders() 方法获取已注册提供者列表。
-
- 参数:
algorithm- 所请求算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference中的附录 A。- 返回:
- 新 Signature 对象。
- 抛出:
NoSuchAlgorithmException- 如果没有 Provider 支持指定算法的 Signature 实现。- 另请参见:
- Provider
getInstance
public static Signature getInstance(String algorithm,
String provider)
throws NoSuchAlgorithmException,
NoSuchProviderException
- 返回实现指定签名算法的 Signature 对象。
返回封装 SignatureSpi 实现的新 Signature 对象,该实现取自指定提供者。指定的提供者必须在安全提供者列表中注册。
注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。
-
- 参数:
algorithm- 所请求算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference中的附录 A。provider- 提供者的名称。- 返回:
- 新 Signature 对象。
- 抛出:
NoSuchAlgorithmException- 如果指定算法的 SignatureSpi 实现不能从指定提供者获得。NoSuchProviderException- 如果指定提供者未在安全提供者列表中注册。IllegalArgumentException- 如果提供者的名称为 null 或空。- 另请参见:
- Provider
getInstance
public static Signature getInstance(String algorithm,
Provider provider)
throws NoSuchAlgorithmException
- 返回实现指定签名算法的 Signature 对象。
返回封装 SignatureSpi 实现的新 Signature 对象,该实现取自指定 Provider 对象。注意,指定 Provider 对象无需在提供者列表中注册。
-
- 参数:
algorithm- 所请求算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference中的附录 A。provider- 提供者。- 返回:
- 新 Signature 对象。
- 抛出:
NoSuchAlgorithmException- 如果指定算法的 SignatureSpi 实现不能从指定提供者对象获得。IllegalArgumentException- 如果 provider 为 null。- 从以下版本开始:
- 1.4
- 另请参见:
- Provider
getProvider
public final Provider getProvider()
- 返回此签名对象的提供者。
-
- 返回:
- 此签名对象的提供者
initVerify
public final void initVerify(PublicKey publicKey)
throws InvalidKeyException
- 初始化此用于验证的对象。如果使用其他参数再次调用此方法,此调用的结果将无效。
-
- 参数:
publicKey- 将验证其签名的标识的公钥。- 抛出:
InvalidKeyException- 如果密钥无效。
initVerify
public final void initVerify(Certificate certificate)
throws InvalidKeyException
- 使用来自给定证书的公钥初始化此用于验证的对象。
如果证书是 X.509 类型且具有标记为重要的 key usage 扩展字段,并且 key usage 扩展字段的值暗示着证书中的公钥及其对应的私钥不允许用于数字签名,则抛出
InvalidKeyException。 -
- 参数:
certificate- 将验证其签名的标识的证书。- 抛出:
InvalidKeyException- 如果证书中的公钥未被正确解码,或者未包括所请求的参数信息,或者不能用于数字签名。- 从以下版本开始:
- 1.3
initSign
public final void initSign(PrivateKey privateKey)
throws InvalidKeyException
- 初始化这个用于签名的对象。如果使用其他参数再次调用此方法,此调用的结果将无效。
-
- 参数:
privateKey- 将生成其签名的标识的私钥。- 抛出:
InvalidKeyException- 如果密钥无效。
initSign
public final void initSign(PrivateKey privateKey,
SecureRandom random)
throws InvalidKeyException
- 初始化这个用于签名的对象。如果使用其他参数再次调用此方法,此调用的结果将无效。
-
- 参数:
privateKey- 将生成其签名的标识的私钥。random- 此签名的随机源。- 抛出:
InvalidKeyException- 如果密钥无效。
sign
public final byte[] sign()
throws SignatureException
- 返回所有已更新数据的签名字节。签名的格式取决于基础签名方案。
对此方法的调用将把此签名对象重新设置到以前为进行签名而通过调用
initSign(PrivateKey)对其初始化时的状态。也就是说,如果需要,通过重新调用update和sign,可重新设置对象,并且可以通过它从同一个签署者中生成其他人的签名。 -
- 返回:
- 签名操作结果的签名字节。
- 抛出:
SignatureException- 如果此签名对象未得到正确初始化,或者此签名算法不能处理所提供的输入数据。
sign
public final int sign(byte[] outbuf,
int offset,
int len)
throws SignatureException
- 完成签名操作并从
offset开始,将得到的签名字节存储在提供的缓冲区outbuf中。签名的格式取决于基础签名方案。此签名对象将被重新设置到其初始状态(对其中的一种
initSign方法调用之后所处的状态),并且可重新使用此签名对象,用同一个私钥生成将来的签名。 -
- 参数:
outbuf- 输出签名结果的缓冲区。offset- 到存储签名的outbuf的偏移量。len-outbuf中分配给签名的字节数。- 返回:
- 放入
outbuf中的字节数。 - 抛出:
SignatureException- 如果此签名对象未得到正确初始化,如果此签名算法无法处理所提供的输入数据,或者len少于实际签名长度。- 从以下版本开始:
- 1.2
verify
public final boolean verify(byte[] signature)
throws SignatureException
- 验证传入的签名。
对此方法的调用将把此签名对象重新设置到以前为进行验证而通过调用
initVerify(PublicKey)对其初始化时的状态。也就是说,该对象将被重新设置,并且可以用来验证调用initVerify时其公钥所指定的标识中的其他签名。 -
- 参数:
signature- 要验证的签名字节。- 返回:
- 如果签名得到验证,则返回 true,否则将返回 false。
- 抛出:
SignatureException- 如果此签名对象未得到正确初始化,传入的签名未得到正确解码,或类型错误,如果此签名算法不能处理所提供的输入数据等。
verify
public final boolean verify(byte[] signature,
int offset,
int length)
throws SignatureException
- 从指定的偏移量开始,验证指定的 byte 数组中传入的签名。
对此方法的调用将把此签名对象重新设置到以前为进行验证而通过调用
initVerify(PublicKey)对其初始化时的状态。也就是说,该对象将被重新设置,并且可以用来验证调用initVerify时其公钥所指定的标识中的其他签名。 -
- 参数:
signature- 要验证的签名字节。offset- byte 数组中起始处的偏移量。length- 要使用的字节数(从偏移量起始处算起)。- 返回:
- 如果签名得到验证,则返回 true,否则将返回 false。
- 抛出:
SignatureException- 如果此签名对象未得到正确初始化,传入的签名未得到正确解码,或者类型错误,如果此签名算法无法处理所提供的输入数据等。IllegalArgumentException- 如果signaturebyte 数组为 null,或者offset或length小于 0,或者offset与length的和大于signaturebyte 数组的长度。- 从以下版本开始:
- 1.4
update
public final void update(byte b)
throws SignatureException
- 更新要由字节签名或验证的数据。
-
- 参数:
b- 用于更新的字节。- 抛出:
SignatureException- 如果此签名对象未得到正确初始化。
update
public final void update(byte[] data)
throws SignatureException
- 使用指定的 byte 数组更新要签名或验证的数据。
-
- 参数:
data- 用于更新的 byte 数组。- 抛出:
SignatureException- 如果此签名对象未得到正确初始化。
update
public final void update(byte[] data,
int off,
int len)
throws SignatureException
- 从指定的偏移量开始,使用指定的 byte 数组更新要签名或验证的数据。
-
- 参数:
data- byte 数组。off- 到 byte 数组开始处的偏移量。len- 要使用的字节数,从偏移量起始处算起。- 抛出:
SignatureException- 如果此签名对象未得到正确初始化。
update
public final void update(ByteBuffer data)
throws SignatureException
- 使用指定的 ByteBuffer 更新要签名或验证的数据。处理从
data.position()处开始的data.remaining()字节。返回时,缓冲区的位置将等于其限制;其限制并未改变。 -
- 参数:
data- ByteBuffer- 抛出:
SignatureException- 如果此签名对象未得到正确初始化。- 从以下版本开始:
- 1.5
getAlgorithm
public final String getAlgorithm()
- 返回此签名对象的算法名称。
-
- 返回:
- 此签名对象的算法名称。
toString
public String toString()
- 返回此签名对象的字符串表示形式,以提供包括对象状态和所用算法名称在内的信息。
-
- 覆盖:
- 类
Object中的toString
-
- 返回:
- 此签名对象的字符串表示形式。
setParameter
@Deprecated
public final void setParameter(String param,
Object value)
throws InvalidParameterException
- 已过时。 使用 setParameter 取代。
- 将指定的算法参数设置为指定的值。此方法提供了一种通用机制,通过它可以设置此对象的各种参数。参数可以是算法的任何可设置参数,如参数大小、签名生成的随机源位(如果适当),或者表示是否执行具体但可选的计算。每个参数都需要统一的、特定于算法的命名方案,但此时尚未指定这种方案。
-
- 参数:
param- 参数的字符串标示符。value- 参数值。- 抛出:
InvalidParameterException- 如果param是此算法引擎的无效参数,或者已经设置参数并且不能重新设置,或者出现了安全异常等等。- 另请参见:
- getParameter(java.lang.String)
setParameter
public final void setParameter(AlgorithmParameterSpec params)
throws InvalidAlgorithmParameterException
- 使用指定的参数集初始化此签名引擎。
-
- 参数:
params- 参数- 抛出:
InvalidAlgorithmParameterException- 如果给定的参数不适合此签名引擎- 另请参见:
- getParameters()
getParameters
public final AlgorithmParameters getParameters()
- 返回与此签名对象一起使用的参数。
返回的参数可能与用来初始化此签名的参数相同;如果此签名需要算法参数但却未使用任何参数进行初始化,则返回的参数可能会包含由底层签名实现所使用的默认值和随机生成的参数值的组合。
-
- 返回:
- 用于此签名的参数,如果此签名不使用任何参数,则返回 null。
- 从以下版本开始:
- 1.4
- 另请参见:
- setParameter(AlgorithmParameterSpec)
getParameter
@Deprecated
public final Object getParameter(String param)
throws InvalidParameterException
- 已过时。
- 获取指定的算法参数的值。此方法提供了一种通用机制,通过它能够获取此对象的各种参数。参数可以是算法的任何可设置参数,如参数大小、签名生成的随机源位(如果适当),或者表示是否执行具体但可选的计算。每个参数都需要统一的、特定于算法的命名方案,但此时尚未指定这种方案。
-
- 参数:
param- 参数的字符串名称。- 返回:
- 表示参数值的对象,如果没有,则返回 null。
- 抛出:
InvalidParameterException- 如果param是此引擎的无效参数,或者尝试获取此参数时出现其他异常。- 另请参见:
- setParameter(String, Object)
clone
public Object clone()
throws CloneNotSupportedException
- 如果此实现可以复制,则返回副本。
-
- 覆盖:
- 类
SignatureSpi中的clone
-
- 返回:
- 如果此实现可以复制,则返回一个副本。
- 抛出:
CloneNotSupportedException- 如果调用一个不支持Cloneable的实现。- 另请参见:
- Cloneable
java 签名类 Signature的更多相关文章
- 深入理解java虚拟机【Java Class类文件结构】
Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码 ...
- (转)《深入理解java虚拟机》学习笔记5——Java Class类文件结构
Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码 ...
- 面试准备(三) Java 异常类层次结构
在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中.这类容易出选择题 考试你是否掌握了异常类并清楚哪些异常类必须捕获 下面的图展示了Java异常类的继承关系. 图1 粉红色的 ...
- Java 异常类层次结构
在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中. 下面的图展示了Java异常类的继承关系. 图1 粉红色的是受检查的异常(checked exceptions),其必须被 ...
- Mybatis包分页查询java公共类
Mybatis包分页查询java公共类 分页----对于数据量非常大的查询中.是不可缺少的. mybatis底层的分页sql语句因为须要我们自己去手动写.而实现分页显示的时候我们须要依据分页查询条 ...
- JAVA类的创建: 创建JAVA的类 ,JAVA的字段,JAVA类的方法
1. 创建Java的类 如果说Java的一切都是对象,那么类型就是决定了某一类对象的外观与行为.可是类型的关键字不是type,而是class,创建一个新的类型要用下面的代码: 1 2 3 class ...
- Rsa2验签报错【java.security.SignatureException: Signature length not correct】的解决办法
在进行RSA2进行验签的时候,报了以下错误: java.security.SignatureException: Signature length not correct: got 344 but w ...
- Java主类的装载
在JavaMain()函数中调用LoadMainClass()函数加载Java主类.LoadMainClass()函数的实现如下: /* * Loads a class and verifies th ...
- 第29篇-调用Java主类的main()方法
在第1篇中大概介绍过Java中主类方法main()的调用过程,这一篇介绍的详细一点,大概的调用过程如下图所示. 其中浅红色的函数由主线程执行,而另外的浅绿色部分由另外一个线程执行,这个线程最终也会负责 ...
随机推荐
- 排查java.lang.OutOfMemoryError: GC overhead limit exceeded
帮助客户排查java.lang.OutOfMemoryError: GC overhead limit exceeded错误记录: 具体网址: https://support.oracle.com/e ...
- unity postprocessing stack v2的优化
今天做到33ms了 从45ms 到33ms 后处理占20ms 优化后8ms 去掉两次blit fast mode layer 去掉UI camera 用overlay 层级用sortingorder ...
- 面试题:判断两个字符串是否互为回环变位(Circular Rotaion)
题干: 如果字符串 s 中的字符循环移动任意位置之后能够得到另一个字符串 t,那么 s 就被称为 t 的回环变位(circular rotation). 例如,ACTGACG 就是 TGACG ...
- 【C/C++学院】0723-32位与64位/调戏窗体程序/数据分离算法/内存检索/二分查找法/myVC
[送给在路上的程序猿] 对于一个开发人员而言,能够胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够运用到系统中,由此简化系统的开发,是其架构生涯的第一步. ...
- linux基础教程---设置文件的主人、组别
我们在操作linux的是要告诉文件是属于哪个主人的,哪个组别的.这样我们就须要知道该怎样设置": 设置文件的主人.组别 chown: change owner >chown 主人 ...
- Centos中mount命令挂载windows7共享文件夹
1) 在ip:10.4.35.77的windows机器上新建用户.这里新建username:myshare,password:myshare123. 选择 [计算机]右键 选择[管理],本地用户和组 ...
- servlet--百度百科
Servlet(Server Applet),全称Java Servlet, 未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servle ...
- 《从零開始学Swift》学习笔记(Day 57)——Swift编码规范之凝视规范:文件凝视、文档凝视、代码凝视、使用地标凝视
原创文章.欢迎转载.转载请注明:关东升的博客 前面说到Swift凝视的语法有两种:单行凝视(//)和多行凝视(/*...*/).这里来介绍一下他们的使用规范. 1.文件凝视 文件凝视就在每个文件开头加 ...
- hdu 4723 How Long Do You Have to Draw(贪心)
How Long Do You Have to Draw Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- iOS学习笔记-地图MapKit入门
代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...