第二部分:进行数字签名
从密钥文件中读取KeyPair对象。 调用KeyPair对象的getPrivate()和getPublic()方法,分别获取PrivateKey和PublicKey。 利用密钥的指定算法生成Signature实例,然后利用PrivateKey和文件内容,分别调用其initSign()和update()方法,最后调用sign()方法生成数字签名。第三部分:进行签名验证
从密钥文件中读取KeyPair对象。 调用KeyPair对象的getPrivate()和getPublic()方法,分别获取PrivateKey和PublicKey。 利用密钥的指定算法生成Signature实例,然后利用PublicKey和文件内容,分别调用其initSign()和update()方法,最后利用数字签名调用verify()方法验证签名。四、参考代码
根据上面的步骤描述,基本可以写出程序来了。下面是参考代码,未必尽善尽美,但是基本功能都体现到了,供你参考。
工程结构:

DataSecurity类:
package com.hzj.security;
import java.io.UnsupportedEncodingException;
import java.nio.charset.CharsetEncoder;
import java.security.KeyPair;
import com.hzj.util.StringHelper;
public class DataSecurity {
private KeyPair keyPair;
private static final String KEY_FILE = "/ca.key";
private DataSignaturer dataSignaturer;
public DataSecurity() {
try {
this.keyPair = KeyPairUtil.loadKeyPair(getClass().getResourceAsStream("/ca.key"));
this.dataSignaturer = new DataSignaturer(this.keyPair.getPublic(), this.keyPair.getPrivate());
} catch (RuntimeException e) {
System.out.println("没有找到KeyPair文件[/ca.key]!");
}
}
/**
* 验证数字签名
* @param data
* @param signs
* @return
*/
public boolean verifySign(String data, String signs) {
if ((data == null) || (signs == null)) {
System.out.println("参数为Null");
}
boolean verifyOk = false;
try {
verifyOk = this.dataSignaturer.verifySign(data.getBytes("UTF-8"), StringHelper.decryptBASE64(signs));
} catch (RuntimeException e) {
System.out.println("fail!data=" + data + ", sign=" + signs + ", exception:" + e.getMessage());
} catch (UnsupportedEncodingException e) {
System.out.println("不支持UTF-8字符集");
} catch (Exception e) {
System.out.println("Exception:" + e.getMessage());
}
if (!verifyOk) {
System.out.println("fail!data=" + data + ", sign=" + signs + ", verifyOk=false!");
}
return verifyOk;
}
/**
* 生成数字签名
* @param data
* @return
*/
public String sign(String data)
{
if (data == null) {
System.out.println("参数为Null");
}
String sign = null;
try
{
sign = StringHelper.encryptBASE64(this.dataSignaturer.sign(data.getBytes("UTF-8")));
}
catch (UnsupportedEncodingException e)
{
System.out.println("不支持UTF-8字符集");
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
return sign;
}
}










