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. VSM(Virtual Storage Manager For Ceph)安装教程

    转载注明出处,陈小跑 http://www.cnblogs.com/chenxianpao/p/5770271.html 一.安装环境 OS:CentOS7.2 VSM:v2.1 released 二 ...

  2. Linux GPRS模块问题

    这是一个硬件问题,不过被我这个学软件的给遇到了.很尴尬,纠结了很久. GPRS模块如果没有插上sim卡,开机之后一切正常.一旦插上卡之后开机大约过十秒钟之后会自动关机.并在串口上面打印一下信息: II ...

  3. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何查看错误代码

    一般模块出错会在Error中显示为TRUE,同时ErrorID中会有一个错误代码,下图所示就是出错之后的效果   在变量表中也可以看到,右击转成16进制查看   由于是NC模块出错,所以可以再NC的E ...

  4. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-Switch Case语句是否会自动跳转到下一个

    在C#中,每一个case后面必须有break,所以输出1,也就是如果a=0,则只会执行case=0的那一段,当等于1之后不会继续.   在TwinCAT中,虽然CASE语句没有break,但是实际上不 ...

  5. Python 类的特殊成员方法详解

    class doges(object): """类的描述信息""" def __init__(self,name,food): self.n ...

  6. LOGO闪光效果

    原地址:http://cl314413.blog.163.com/blog/static/1905079762014122105235138/ 这个效果在很多LOGO及广告宣传中都会用到.商业开发的做 ...

  7. 微信小程序flex容器属性详解

    flex容器属性详解 flex-direction决定元素的排列方向 flex-wrap决定元素如何换行 flex-flow 是 flex-direction 和flex-wrap的简写 justif ...

  8. HDU 3917 Road constructions(最小割---最大权闭合)

    题目地址:HDU 3917 这题简直神题意... 题目本身就非常难看懂不说..即使看懂了.也对这题意的逻辑感到无语...无论了.. 就依照那题意上说的做吧... 题意:给你n个城市,m个公司.若干条可 ...

  9. hibernate 继承映射关系( SINGLE_TABLE)

    三种继承映射关系.   1,SINGLE_TABLE   person student  teacher 在一个表中,student和teacher继承自person,通过一个Discriminato ...

  10. js实现多少秒后自动跳转

    第一种使用SetInterval: $(function () { setInterval(ChangeTime, 1000); }); function ChangeTime() { var tim ...