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,对消息摘要算法则会有多种选择,因此,可以将签名算法指定为 MD2withRSAMD5withRSA 或 SHA1withRSA。因为没有默认的算法名称,所以必须为其指定名称。

Signature 对象可用来生成和验证数字签名。

使用 Signature 对象签名数据或验证签名包括以下三个阶段:

  1. 初始化,使用

    • 初始化验证签名的公钥(请参见 initVerify),或使用
    • 初始化签署签名的私钥(也可以选择“安全随机数生成器”),(请参见 initSign(PrivateKey) 和 initSign(PrivateKey, SecureRandom))。
  2. 更新

    根据初始化类型,这可更新要签名或验证的字节。请参见 update 方法。

  3. 签署或验证所有更新字节的签名。请参见 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 - 如果 signature byte 数组为 null,或者 offset 或 length 小于 0,或者 offset 与 length 的和大于 signature byte 数组的长度。
从以下版本开始:
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的更多相关文章

  1. 深入理解java虚拟机【Java Class类文件结构】

    Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码 ...

  2. (转)《深入理解java虚拟机》学习笔记5——Java Class类文件结构

    Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码 ...

  3. 面试准备(三) Java 异常类层次结构

    在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中.这类容易出选择题 考试你是否掌握了异常类并清楚哪些异常类必须捕获 下面的图展示了Java异常类的继承关系. 图1 粉红色的 ...

  4. Java 异常类层次结构

    在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中. 下面的图展示了Java异常类的继承关系. 图1 粉红色的是受检查的异常(checked exceptions),其必须被 ...

  5. Mybatis包分页查询java公共类

    Mybatis包分页查询java公共类   分页----对于数据量非常大的查询中.是不可缺少的. mybatis底层的分页sql语句因为须要我们自己去手动写.而实现分页显示的时候我们须要依据分页查询条 ...

  6. JAVA类的创建: 创建JAVA的类 ,JAVA的字段,JAVA类的方法

    1. 创建Java的类 如果说Java的一切都是对象,那么类型就是决定了某一类对象的外观与行为.可是类型的关键字不是type,而是class,创建一个新的类型要用下面的代码: 1 2 3 class ...

  7. Rsa2验签报错【java.security.SignatureException: Signature length not correct】的解决办法

    在进行RSA2进行验签的时候,报了以下错误: java.security.SignatureException: Signature length not correct: got 344 but w ...

  8. Java主类的装载

    在JavaMain()函数中调用LoadMainClass()函数加载Java主类.LoadMainClass()函数的实现如下: /* * Loads a class and verifies th ...

  9. 第29篇-调用Java主类的main()方法

    在第1篇中大概介绍过Java中主类方法main()的调用过程,这一篇介绍的详细一点,大概的调用过程如下图所示. 其中浅红色的函数由主线程执行,而另外的浅绿色部分由另外一个线程执行,这个线程最终也会负责 ...

随机推荐

  1. iOS:XMPP即时聊天知识

    XMPP即时聊天框架:XMPPFramework   XMPP The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议). 基于XML XM ...

  2. 一起來玩鳥 Starling Framework(5)Multi-Touch

    這篇來談談Starling的Multi-Touch.前一篇也提到,Multi-Touch一樣是監聽TouchEvent.TOUCH,然後由TouchEvent的e.getTouches()取回多點的資 ...

  3. 菜鸟调错(五)——jetty执行时无法保存文件

    背景交代: 上一篇博客写的是用jetty和Maven做开发.測试.在使用的过程中遇到一个小问题.就是在jetty启动以后,改动了jsp.xml等文件无法保存. 错误信息: 解决方式: 到Maven库( ...

  4. 【FAQ】Ubuntu环境下ant编译android代码问题

    在Ubuntu14.04环境下,编译android程序时候,运行ant debug的时候出现如下异常:

  5. 输入N,打印如图所看到的的三角形(例:N=3,N=4,N=5)1<=N<=26

    package demo; public class PrintDemo { public static void main(String[] args) { print(26); } private ...

  6. PHP中单引号双引号使用原则

    PHP中单引号双引号使用原则   1.PHP中尽量用单引号,HTML代码全部用双引号   2.在包含变量的时候,用双引号可以简化操作   3.复杂的情况下用大括号包起来   4 PHP引号还有一个用处 ...

  7. axios 取消请求

    解决思路 在发送第二次请求的时候如果第一次请求还未返回,则取消第一次请求,以保证后发送的请求返回的数据不会被先发送的请求覆盖. axios官方文档取消请求说明 方法一: const CancelTok ...

  8. 基于STC12C5A的MINI3216多功能点阵时钟

    代码地址如下:http://www.demodashi.com/demo/12862.html 基于STC12C5A的MINI3216多功能点阵时钟 硬件详解 PCB 硬件原理图 主控模块 max72 ...

  9. 8.1.3 在BroadcastReceiver中启动Service

    2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T <Android/OPhone开发完全讲义>第8章Android服务,本章主要介绍了Android系统 中的服 ...

  10. Hive 差集运算

    差集定义:一般地,设A,B是两个集合,由所有属于A且不属于B的元素组成的集合,叫做集合A减集合B(或集合A与集合B之差). 类似地,对于集合A,B,我们把集合{x/x∈A,且x¢B}叫做A与B的差集, ...