欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数字签名

程序员文章站 2022-07-09 11:50:41
...

Signature类

Signature类用来生成和验证数字签名(引擎类)

方法详述

1)初始化
初始化验证签名的公钥
初始化验证签名的私钥
2)更新
根据初始化类型,可更新要签名或验证的字节
3)签署或验证所有更新字节的签名

getInstance(String algorithm)
getInstance(String algorithm,Provider provider)
getInstance(String algorithm,String provider)

//初始化用于签名的Signature对象
initSign(PrivateKey privateKey)
initSign(PrivateKey privateKey,SecureRandom random)

//初始化用于验证的Signature对象
initVertify(PublicKey publicKey)
//初始化来自给定证书的公钥初始化用于验证的Signature对象
initVertify(Certificate certificate)

//使用指定的字节数组更新要签名和验证的数据
update(byte[] data)

//从指定偏移量开始更新
update(byte[] data,int off,int len)

//使用缓冲方式更新
update(ByteBuffer data)

//返回所有的已更新数据的签名或验证的字节
sign()

//完成签名操作,并得到存储在缓冲区域中的签名字节长度
sign(byte[] output,int offset,int len)

//验证传入的签名,并返回验证结果
vertify(byte[] signature)
vertify(byte[] signature,int offset,int len)

//使用指定的参数集初始化此签名引擎
setParameter(AlgorithmParameterSpec params)

//返回与此签名对象一起使用的参数
getParameters()

//获取算法名称
getAlgorithm();

//若可以复制则返回副本
clone()

//获取提供者
getProvider();

//输出信息
toString();

实现实例

//待做数据签名的原始信息
byte[] data = "Data Signature".getBytes();
//实例化KeyPairGenerator对象
KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");
//初始化KeyPairGenerator对象
kpg.initialize(1024);
//生成KeyPair对象
KeyPair kp = kpg.genKeyPair();
//实例化Signture对象
Signature signature = Signature.getInstance(kpg.getAlgorithm());
//初始化用于签名的Signature对象
signature.initSign(kp.getPrivate());
//更新
signature.update(data);
//获得签名,即字节数组Sign
byte[] sign = signature.sign();
//私钥完成签名,公钥用于完成验证
signature.initVerify(kp.getPublic());
//更新
signature.update(data);
//获取验证结果
boolean status = signature.verify(sign);
System.out.println(status); //true

其他的方式SignedObject

SignedObject包含了另外一个Serializable对象,即要签名的对象及其签名,我们可以称之为签名对象。它是对原始对象的“深层复制”,一旦生成了副本,对原始对象的进一步操作就不再影响该副本。

方法详述

//构造器
SignedObject(Serializable object,PrivateKey privateKey,Signature signingEngine)

//获取已封装的对象
getObject()

//获取签名
getSignature()

//验证操作
vertify(PublicKey verificationKey,Signature verificatioEngine)

//获取签名算法名
getAlgorithm()

第二种数字签名实例

//待做数字签名的原始信息
byte[] data = "Data Signature".getBytes();
//实例化KeyPairGenerator对象
KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");
//初始化KeyPairGenerator对象
kpg.initialize(1024);
//生成KeyPair对象
KeyPair keyPair = kpg.genKeyPair();
//实例化Signature对象
Signature signature = Signature.getInstance(kpg.getAlgorithm());
//实例化SignObject对象
SignedObject s = new SignedObject(data,keyPair.getPrivate(),signature);

//通过另外一种方式得到签名
byte[] sign = s.getSignature();
//验证签名
boolean status = s.verify(keyPair.getPublic(),signature);
System.out.println(status); //true

上一篇: 数字签名

下一篇: 数字签名算法