数字签名
程序员文章站
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