您的位置:首页 > 其它

数字签名

2019-04-08 17:58 42 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: