随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

一、概述

类结构:

java.lang.Objectjava.security.SignatureSpijava.security.Signature

声明:public abstract class Signature extends SignatureSpi

二、字段

1、protected static final int UNINITIALIZED   可能的 state 值,表示尚未初始化此签名对象。 

2、protected static final int SIGN  可能的 state 值,表示此签名对象已经初始化签名。

3、protected static final int VERIFY  可能的 state 值,表示此签名对象已经初始化验证。

4、protected int state  此签名对象的当前状态。

三、构造方法

protected Signature(String algorithm)  创建指定算法的 Signature 对象。
 

参数:algorithm - 算法的标准字符串名称。

四、方法详细

1、public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException 返回实现指定签名算法的 Signature 对象。

此方法从首选的提供者开始遍历已注册安全提供者列表。返回封装 SignatureSpi 实现的新 Signature 对象,该实现取自第一个支持指定算法的 Provider。

注意,可以通 Security.getProviders() 方法获取已注册提供者列表。

参数:algorithm - 所请求算法的标准名称。有关标准算法名称的信息

返回:新 Signature 对象。

抛出:NoSuchAlgorithmException - 如果没有 Provider 支持指定算法的 Signature 实现。

2、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 或空。

3、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。

4、public final Provider getProvider()  返回此签名对象的提供者。

5、public final void initVerify(PublicKey publicKey) throws InvalidKeyException  初始化此用于验证的对象。如果使用其他参数再次调用此方法,此调用的结果将无效。

参数:

publicKey - 将验证其签名的标识的公钥。

抛出:

InvalidKeyException - 如果密钥无效。

6、public final void initVerify(Certificate certificate) throws InvalidKeyException  使用来自给定证书的公钥初始化此用于验证的对象。

如果证书是 X.509 类型且具有标记为重要的 key usage 扩展字段,并且 key usage 扩展字段的值暗示着证书中的公钥及其对应的私钥不允许用于数字签名,则抛出 InvalidKeyException

参数:

certificate - 将验证其签名的标识的证书。

抛出:

InvalidKeyException - 如果证书中的公钥未被正确解码,或者未包括所请求的参数信息,或者不能用于数字签名。

7、public final void initSign(PrivateKey privateKey) throws InvalidKeyException  初始化这个用于签名的对象。如果使用其他参数再次调用此方法,此调用的结果将无效。

参数:

privateKey - 将生成其签名的标识的私钥。

抛出:

InvalidKeyException - 如果密钥无效。

8、public final void initSign(PrivateKey privateKey, SecureRandom random) throws InvalidKeyException

初始化这个用于签名的对象。如果使用其他参数再次调用此方法,此调用的结果将无效。

参数:

privateKey - 将生成其签名的标识的私钥。

random - 此签名的随机源。

抛出:

InvalidKeyException - 如果密钥无效。

9、public final byte[] sign() throws SignatureException   返回所有已更新数据的签名字节。签名的格式取决于基础签名方案。

对此方法的调用将把此签名对象重新设置到以前为进行签名而通过调用 initSign(PrivateKey) 对其初始化时的状态。也就是说,如果需要,通过重新调用 updatesign,可重新设置对象,并且可以通过它从同一个签署者中生成其他人的签名。

返回:

签名操作结果的签名字节。

抛出:

SignatureException - 如果此签名对象未得到正确初始化,或者此签名算法不能处理所提供的输入数据。

10、public final int sign(byte[] outbuf,int offset, int len) throws SignatureException  完成签名操作并从 offset 开始,将得到的签名字节存储在提供的缓冲区 outbuf 中。签名的格式取决于基础签名方案。

此签名对象将被重新设置到其初始状态(对其中的一种 initSign 方法调用之后所处的状态),并且可重新使用此签名对象,用同一个私钥生成将来的签名。

参数:

outbuf - 输出签名结果的缓冲区。

offset - 到存储签名的 outbuf 的偏移量。

len - outbuf 中分配给签名的字节数。

返回:

放入 outbuf 中的字节数。

抛出:

SignatureException - 如果此签名对象未得到正确初始化,如果此签名算法无法处理所提供的输入数据,或者 len 少于实际签名长度。

11、public final boolean verify(byte[] signature)  throws SignatureException  验证传入的签名。

对此方法的调用将把此签名对象重新设置到以前为进行验证而通过调用 initVerify(PublicKey) 对其初始化时的状态。也就是说,该对象将被重新设置,并且可以用来验证调用 initVerify 时其公钥所指定的标识中的其他签名。

参数:

signature - 要验证的签名字节。

返回:

如果签名得到验证,则返回 true,否则将返回 false。

抛出:

SignatureException - 如果此签名对象未得到正确初始化,传入的签名未得到正确解码,或类型错误,如果此签名算法不能处理所提供的输入数据等。

12、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,或者 offsetlength 小于 0,或者 offsetlength 的和大于 signature byte 数组的长度。

13、public final void update(byte b) throws SignatureException  更新要由字节签名或验证的数据。

参数:

b - 用于更新的字节。

抛出:

SignatureException - 如果此签名对象未得到正确初始化。

14、public final void update(byte[] data) throws SignatureException  使用指定的 byte 数组更新要签名或验证的数据。

参数:

data - 用于更新的 byte 数组。

抛出:

SignatureException - 如果此签名对象未得到正确初始化。

15、public final void update(byte[] data, int off, int len) throws SignatureException   从指定的偏移量开始,使用指定的 byte 数组更新要签名或验证的数据。

参数:

data - byte 数组。

off - 到 byte 数组开始处的偏移量。

len - 要使用的字节数,从偏移量起始处算起。

抛出:

SignatureException - 如果此签名对象未得到正确初始化。

16、public final void update(ByteBuffer data) throws SignatureException  使用指定的 ByteBuffer 更新要签名或验证的数据。处理从 data.position() 处开始的 data.remaining() 字节。返回时,缓冲区的位置将等于其限制;其限制并未改变。

参数:

data - ByteBuffer

抛出:

SignatureException - 如果此签名对象未得到正确初始化。

17、public final String getAlgorithm()  返回此签名对象的算法名称。

18、public String toString()  返回此签名对象的字符串表示形式,以提供包括对象状态和所用算法名称在内的信息。

19、public final void setParameter(String param, Object value)  throws InvalidParameterException

已过时。 使用 setParameter 取代。

将指定的算法参数设置为指定的值。此方法提供了一种通用机制,通过它可以设置此对象的各种参数。参数可以是算法的任何可设置参数,如参数大小、签名生成的随机源位(如果适当),或者表示是否执行具体但可选的计算。每个参数都需要统一的、特定于算法的命名方案,但此时尚未指定这种方案。

参数:

param - 参数的字符串标示符。

value - 参数值。

抛出:

InvalidParameterException - 如果 param 是此算法引擎的无效参数,或者已经设置参数并且不能重新设置,或者出现了安全异常等等。

另请参见:

getParameter(java.lang.String)

20、public final void setParameter(AlgorithmParameterSpec params) throws InvalidAlgorithmParameterException

使用指定的参数集初始化此签名引擎。

参数:

params - 参数

抛出:

InvalidAlgorithmParameterException - 如果给定的参数不适合此签名引擎

另请参见:

getParameters()

21、public final AlgorithmParameters getParameters()

返回与此签名对象一起使用的参数。

返回的参数可能与用来初始化此签名的参数相同;如果此签名需要算法参数但却未使用任何参数进行初始化,则返回的参数可能会包含由底层签名实现所使用的默认值和随机生成的参数值的组合。

返回:

用于此签名的参数,如果此签名不使用任何参数,则返回 null。

从以下版本开始:

1.4

另请参见:

setParameter(AlgorithmParameterSpec)

22、public final Object getParameter(String param) throws InvalidParameterException

已过时。

获取指定的算法参数的值。此方法提供了一种通用机制,通过它能够获取此对象的各种参数。参数可以是算法的任何可设置参数,如参数大小、签名生成的随机源位(如果适当),或者表示是否执行具体但可选的计算。每个参数都需要统一的、特定于算法的命名方案,但此时尚未指定这种方案。

参数:

param - 参数的字符串名称。

返回:

表示参数值的对象,如果没有,则返回 null。

抛出:

InvalidParameterException - 如果 param 是此引擎的无效参数,或者尝试获取此参数时出现其他异常。

另请参见:

setParameter(String, Object)

23、public Object clone() throws CloneNotSupportedException

如果此实现可以复制,则返回副本。

覆盖:

SignatureSpi 中的 clone

返回:

如果此实现可以复制,则返回一个副本。

抛出:

CloneNotSupportedException - 如果调用一个不支持 Cloneable 的实现。

另请参见:

Cloneable

 

java中的Signature相关推荐

  1. Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结

    1. 方法 1.1 方法 实现了某一功能,代码可以复用 1.2 方法签名 java中每个方法都有一个签名,包含方法名和参数列表(类型.个数以及顺序),只要其中一个不同,方法的签名不同,也就是属于不同的 ...

  2. enclosing type java_两个问题,1.java中什么是函数的signature,2.java中什么是enclosing method...

    展开全部 方法的签名可以唯一的确定这个函数 方法签名由方法名称和一个参数列表32313133353236313431303231363533e4b893e5b19e31333335333662(方法的 ...

  3. java中原生方法_java中原生(native)函数的用法

    1.原生(Native)函数的概念 在Java程序中,可以使用由其他编程语言实现的函数,这种函数,在Java中被称之为 原生(Native)函数. 2.在Java程序中使用原生函数的优缺点 1)优点 ...

  4. java中class对象的理解 讲得相当不错 很接地气 引用下

    https://blog.csdn.net/mcryeasy/article/details/52344729 https://blog.csdn.net/dufufd/article/details ...

  5. Java系列:关于Java中的桥接方法

    这两天在看<Java核心技术 卷1>的泛型相关章节,其中说到了在泛型子类中override父类的泛型方法时,编译器会自动生成一个桥接方法,这块有点看不明白. 书上的例子代码如下: publ ...

  6. java基础提升篇:Java中Native关键字的作用

    初遇 初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: public native int hashCode(); 为什么有个native呢?这是我所要 ...

  7. Java中native关键字

    今日在hibernate源代码中遇到了native关键词,甚是陌生,就查了点资料,对native是什么东西有了那么一点了解,并做一小记. native关键字说明其修饰的方法是一个原生态方法,方法对应的 ...

  8. Android+Java中使用RSA加密实现接口调用时的校验功能

    场景 RSA加密 RSA算法是一种非对称加密算法,那么何为非对称加密算法呢? 一般我们理解上的加密是这样子进行的:原文经过了一把钥匙(密钥)加密后变成了密文,然后将密文传递给接收方,接收方再用这把钥匙 ...

  9. java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?...

    本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: C++ Virtual/Pure Virtual Explained 虚函数和纯虚函数有什么区别? CPP中的纯虚函数与 ...

最新文章

  1. centos 断电重启后,文件系统损坏修复
  2. 锦标赛排序、洪水填充算法、平衡规划
  3. 【模板】ISAP最大流
  4. 1415-2 计科计高 软件工程博客Github地址汇总-修正版
  5. HTML知识积累及实践(三) - 列表标签
  6. ai第二次热潮:思维的转变_基于属性的建议:科技创业公司如何使用AI来转变在线评论和建议
  7. 内核驱动系列--内核调试方法
  8. 邹博机器学习升级版II附讲义、参考书与源码(数学 xgboost lda hmm svm)
  9. macOS 汇编指南
  10. 贝叶斯公式的最通俗解释
  11. SPSS对数据进行相关性和显著性分析
  12. php识别二维码内容
  13. Asp开发中出现“msxml3.dll 错误 ‘800c0005‘系统未找到指定的资源
  14. 结节性硬化症会一直病变吗?结节性硬化最晚多大发病?
  15. 学号20182325袁源 实验一《Linux基础与Java开发环境》实验报告
  16. 使用ffmpeg的调色板对图片压缩
  17. Unity3D游戏开发之网络游戏服务器架构设计(如何做一名主程)
  18. python 读取doc 和 docx
  19. BGP------BGP工作原理、BGP属性及选路原则
  20. 什么是量子霸权?我们如何才能实现它?

热门文章

  1. 高新技术企业认定需要的审计报告
  2. MySQL查询所有父节点与所有子节点
  3. (三)OpenFlow协议
  4. python读取图像的exif信息
  5. VN仓库迁移(将一个仓库从一台机器上上转移到另一台机器上)
  6. 国内首条刷脸支付坐地铁开始运营 一分钟可通过30-40名乘客
  7. java 基于oshi的系统监控工具类(带网速上行下行)
  8. ubuntu查看内存占用情况
  9. Pycharm external tools的使用
  10. golang协程实战之抓取豆瓣电影top数据