数字签名

本文介绍了一个使用Java实现的RSA签名及验证过程。通过生成RSA密钥对,利用私钥进行数据签名,并使用公钥完成签名验证。此外,还介绍了如何保存和读取公钥与签名数据。

package com.test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;

public class Sign {

/**
* @param args
*/
public static void main(String[] args) throws Exception {
Sign sign = new Sign();
sign.sign();
sign.verify();
}

public void sign() throws Exception{
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
KeyPair keyPair = kpg.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();

Signature sign = Signature.getInstance("SHA1withRSA");
sign.initSign(privateKey);
sign.update("测试数据".getBytes());
byte[] data = sign.sign();

saveKey(publicKey, "sign_publicKey");
saveData(data, "sign_data");

}

public void verify() throws Exception{

PublicKey publicKey = (PublicKey)readKey("sign_publicKey");

Signature sign = Signature.getInstance("SHA1withRSA");
sign.initVerify(publicKey);
sign.update("测试数据".getBytes());

byte[] data = readData("sign_data");

boolean rs = sign.verify(data);

System.out.println(rs);

}


public void saveData(byte[] data, String fileName) throws Exception{
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(data);
oos.close();
fos.close();
}

public void saveKey(Key key, String fileName) throws Exception{
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(key);
oos.close();
fos.close();
}

public Key readKey(String fileName) throws Exception{
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
Key privateKey = (Key)ois.readObject();
return privateKey;
}

public byte[] readData(String fileName) throws Exception{
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
byte[] data = (byte[])ois.readObject();
return data;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值