您的位置:首页 > 编程语言 > Java开发

java使用RSA加密方式,实现数字签名

2017-10-07 18:24 489 查看
全栈工程师开发手册 (作者:栾鹏)

java教程全解

java使用RSA加密方式,实现数字签名。数字签名,使用私钥获取签名,使用公钥校验签名

测试代码

public static void main(String args[]) throws Exception{
DigitalSignDemo ds=new DigitalSignDemo();
ds.generateKey();  //产生私钥和公钥
byte[] signeddata=ds.sign("test.txt");   //文件签名
// 打印签名
for(int i=0; i<signeddata.length; i++){
System.out.println(signeddata[i]);
}
ds.checkSign("test.txt",signeddata);  //校验签名
}


数字签名工具类的实现

package com.lp.app.safe;

import java.io.*;
import java.security.*;
import java.security.interfaces.*;

public class DigitalSignDemo{

PublicKey pbkey;
PrivateKey prkey;

public void generateKey() {
try {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kp = kpg.genKeyPair();
pbkey = kp.getPublic();
prkey = kp.getPrivate();

} catch (Exception e) {
}
}

//文件签名
public byte[] sign(String path) throws Exception{
//获取要签名的数据
FileInputStream f = new FileInputStream(path);
int num = f.available();
byte[] data = new byte[num];
f.read(data);

// 获取私钥
RSAPrivateKey prk = (RSAPrivateKey)prkey;
Signature s = Signature.getInstance("MD5WithRSA");
s.initSign(prk);
s.update(data);
//数据签名
byte[] signeddata = s.sign();

return signeddata;
}

//校验签名
public void checkSign(String path,byte[] signeddata) throws Exception{
FileInputStream f = new FileInputStream(path);
int num = f.available();
byte[] data = new byte[num];
f.read(data);
// 读公钥
RSAPublicKey pbk = (RSAPublicKey)pbkey;
// 获取对象
Signature s = Signature.getInstance("MD5WithRSA");
//初始化
s.initVerify(pbk);
// 传入原始数据
s.update(data);
boolean ok = false;
try{
//用签名验证原始数据
ok = s.verify(signeddata);
System.out.println(ok);
}
catch(SignatureException e){
System.out.println(e);
}
System.out.println("校验结束!");
}

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