2007-06-02

签名,验证签名

关键字: Java 签名
对数据使用私钥进行签名。
然后使用公钥验证签名。

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();
	}
}
评论
发表评论

您还没有登录,请登录后发表评论