对数据使用私钥进行签名。
然后使用公钥验证签名。
[code]import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.security.SignatureException;
public class Sign {
private static String digits = "0123456789abcdef";
/**
* @param args
* @throws NoSuchAlgorithmException
* @throws SignatureException
* @throws InvalidKeyException
*/
public static void main(String[] args) throws NoSuchAlgorithmException,
SignatureException, InvalidKeyException {
String alg = "RSA";
KeyPairGenerator kpg = KeyPairGenerator.getInstance(alg);
KeyPair kp = kpg.generateKeyPair();
byte[] data = "abc123".getBytes();
System.out.println("Data:" + toHex(data));
// sign
Signature sig1 = Signature.getInstance("NONEwithRSA");
sig1.initSign(kp.getPrivate());
sig1.update(data);
byte[] siged = sig1.sign();
System.out.println("Signed data:" + toHex(siged));
// verify
Signature sig2 = Signature.getInstance("NONEwithRSA");
sig2.initVerify(kp.getPublic());
sig2.update(data);
System.out.println("result:" + sig2.verify(siged));
}
public static String toHex(byte[] data) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i != data.length; i++) {
int v = data[i] & 0xff;
buf.append(digits.charAt(v >> 4));
buf.append(digits.charAt(v & 0xf));
}
return buf.toString();
}
}[/code]
然后使用公钥验证签名。
[code]import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.security.SignatureException;
public class Sign {
private static String digits = "0123456789abcdef";
/**
* @param args
* @throws NoSuchAlgorithmException
* @throws SignatureException
* @throws InvalidKeyException
*/
public static void main(String[] args) throws NoSuchAlgorithmException,
SignatureException, InvalidKeyException {
String alg = "RSA";
KeyPairGenerator kpg = KeyPairGenerator.getInstance(alg);
KeyPair kp = kpg.generateKeyPair();
byte[] data = "abc123".getBytes();
System.out.println("Data:" + toHex(data));
// sign
Signature sig1 = Signature.getInstance("NONEwithRSA");
sig1.initSign(kp.getPrivate());
sig1.update(data);
byte[] siged = sig1.sign();
System.out.println("Signed data:" + toHex(siged));
// verify
Signature sig2 = Signature.getInstance("NONEwithRSA");
sig2.initVerify(kp.getPublic());
sig2.update(data);
System.out.println("result:" + sig2.verify(siged));
}
public static String toHex(byte[] data) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i != data.length; i++) {
int v = data[i] & 0xff;
buf.append(digits.charAt(v >> 4));
buf.append(digits.charAt(v & 0xf));
}
return buf.toString();
}
}[/code]