static String publicExponent = "10001";static String privateExponent = "78bf10f3b7274ddd04da85a2b737dc524f717e765c16515f25479cf7db4627b116da3198fd54ef3732795cb9164029acd8e6c76d6bfa27bd9f433ad88ee7c2bd";static String modulus = "bddf972718f690b4d9e85de3a3a854ed4b72640914fb1073d07319687dbc8fc2b7b5701cce4cd47bdffd343a0e5b2762e572be07aa5c8d1201a035cc440c77a5";static{//generateKeyPair();
}/*** 生成一对密钥*/
static voidgenerateKeyPair()
{try{
KeyPairGenerator gen= KeyPairGenerator.getInstance("RSA");
gen.initialize(512);
KeyPair pair=gen.generateKeyPair();//rsa生成一对公私钥
RSAPublicKey publicKey =(RSAPublicKey) pair.getPublic();
RSAPrivateKey privateKey=(RSAPrivateKey) pair.getPrivate();
BigInteger md=publicKey.getModulus();
BigInteger pe=publicKey.getPublicExponent();
BigInteger _md=privateKey.getModulus();
BigInteger re=privateKey.getPrivateExponent();
assertEquals(md,_md);
publicExponent= pe.toString(16);
privateExponent= re.toString(16);
modulus= md.toString(16);
System.out.println("publicExponent:" +publicExponent);
System.out.println("privateExponent:" +privateExponent);
System.out.println("modulus:" +modulus);
}catch(Exception igr)
{
igr.printStackTrace();
}
}public static String sign(final String plainData) throwsException
{
KeyFactory keyFactory= KeyFactory.getInstance("RSA");
RSAPrivateKeySpec keySpec= new RSAPrivateKeySpec(new BigInteger(modulus, 16),new BigInteger(privateExponent, 16));
PrivateKey privateKey=keyFactory.generatePrivate(keySpec);
Signature signature= Signature.getInstance("SHA1withRSA");
signature.initSign(privateKey);
signature.update(plainData.getBytes("UTF-8"));returnBase64.getEncoder().encodeToString(signature.sign());
}public static boolean verify(final String plainData, final String sign) throwsException
{
KeyFactory keyFactory= KeyFactory.getInstance("RSA");
RSAPublicKeySpec keySpec= new RSAPublicKeySpec(new BigInteger(modulus, 16),new BigInteger(publicExponent, 16));
PublicKey publicKey=keyFactory.generatePublic(keySpec);final Signature signature = Signature.getInstance("SHA1withRSA");
signature.initVerify(publicKey);
signature.update(plainData.getBytes("UTF-8"));returnsignature.verify(Base64.getDecoder().decode(sign));
}/***@paramargs
*@throwsException*/
public static void main(String[] args) throwsException
{
String plainData= "ni hao ,今天天气不错";
String sign=sign(plainData);
System.out.println(sign);//ENRI/kCR/KCrQGyh9zf70Ce5RQtOg/9CJonPohvUgMUAOXeffVwHQCMZN/FxMf8+iTQUdOiDnm3RS9OWTwlUtQ==
System.out.println(verify(plainData, sign));
}