KeyPairGenerator kpg= KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kp = kpg.generateKeyPair();
PublicKey puk=kp.getPublic();
PrivateKey prk = kp.getPrivate();
//先给密钥对
byte[] bpuc=puk.getEncoded();//公钥
byte[] bpri=prk.getEncoded();//私钥
KeyFactory kf = KeyFactory.getInstance("RSA");
String str="一段需要加密的文字:锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦。";
//公钥加密
X509EncodedKeySpec xek = new X509EncodedKeySpec(bpuc);
Key key = kf.generatePublic(xek);
Cipher cipher=Cipher.getInstance(kf.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE,key);
byte[] a=cipher.doFinal(str.getBytes());
String astr=new String(a);
System.out.println("公钥加密:"+astr);
//私钥解密
PKCS8EncodedKeySpec pkcs = new PKCS8EncodedKeySpec(bpri);
key = kf.generatePrivate(pkcs);
cipher=Cipher.getInstance(kf.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] b=cipher.doFinal(a);
String bstr=new String(b);
System.out.println("私钥解密;"+bstr);
//私钥加密
pkcs = new PKCS8EncodedKeySpec(bpri);
key = kf.generatePrivate(pkcs);
cipher=Cipher.getInstance(kf.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE,key);
byte[] c=cipher.doFinal(str.getBytes());
String cstr=new String(c);
System.out.println("私钥加密:"+cstr);
//公钥解密
xek = new X509EncodedKeySpec(bpuc);
key = kf.generatePublic(xek);
cipher=Cipher.getInstance(kf.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE,key);
byte[] d=cipher.doFinal(c);
String dstr=new String(d);
System.out.println("公钥解密:"+dstr);
//签名
Signature sign = Signature.getInstance("MD5withRSA");
//私钥加密生成数字签名??
pkcs = new PKCS8EncodedKeySpec(bpri);
PrivateKey priK = kf.generatePrivate(pkcs);
sign.initSign(priK);
sign.update(cstr.getBytes());
String estr=new String(Base64.encode(sign.sign()));
System.out.println("私钥签名:"+estr);
//公钥校验
xek = new X509EncodedKeySpec(bpuc);
PublicKey pubK = kf.generatePublic(xek);
sign.initVerify(pubK);
sign.update(cstr.getBytes());
System.out.println("公钥校验:"+sign.verify(Base64.decode(estr.getBytes())));