package com.hbesct.etc;
import java.io.IOException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
public class RSATest {
public static void main(String[] args) throws IOException {
try {
KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
gen.initialize(1024);
KeyPair pair = gen.generateKeyPair();
//rsa生成一对公私钥
PublicKey publicKey = pair.getPublic();
PrivateKey privateKey = pair.getPrivate();
System.out.println(privateKey.toString());
//SHA1withRSA算法进行签名
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initSign(privateKey);
byte[] data = "{\"txncode\":\"charge\",\"cardno\":\"2253123456781234\"}".getBytes();
//更新用于签名的数据
sign.update(data);
byte[] signature = sign.sign();
Signature verifySign = Signature.getInstance("SHA1withRSA");
verifySign.initVerify(publicKey);
//用于验签的数据
verifySign.update(data);
boolean flag = verifySign.verify(signature);
System.out.println(flag+"---->"+bytesToHexString(signature));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String str2HexStr(String origin) {
byte[] bytes = origin.getBytes();
String hex = bytesToHexString(bytes);
return hex;
}
private static String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
}