1、先生成一对秘钥,用于创建私钥与公钥
String algorithm = "RSA";
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey aPrivate = keyPair.getPrivate();
PublicKey aPublic = keyPair.getPublic();
byte[] privateEncoded = aPrivate.getEncoded();
byte[] publicEncoded = aPublic.getEncoded();
String privateEncode = Base64.encode(privateEncoded);
String publicEncode = Base64.encode(publicEncoded);
System.out.println(privateEncode);
System.out.println(publicEncode);
2、使用私钥加密公钥解密,或者公钥加密私钥解密
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
String input ="hello";
Cipher cipher= Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE,aPrivate);
byte[] bytes = cipher.doFinal(input.getBytes());
System.out.println(Base64.encode(bytes));
cipher.init(Cipher.DECRYPT_MODE,aPublic);
byte[] bytes2 = cipher.doFinal(bytes);
System.out.println(new String (bytes2));
}
3、完整代码用例
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
String algorithm = "RSA";
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey aPrivate = keyPair.getPrivate();
PublicKey aPublic = keyPair.getPublic();
byte[] privateEncoded = aPrivate.getEncoded();
byte[] publicEncoded = aPublic.getEncoded();
String privateEncode = Base64.encode(privateEncoded);
String publicEncode = Base64.encode(publicEncoded);
System.out.println(privateEncode);
System.out.println(publicEncode);
String input ="hello";
Cipher cipher= Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE,aPrivate);
byte[] bytes = cipher.doFinal(input.getBytes());
System.out.println(Base64.encode(bytes));
cipher.init(Cipher.DECRYPT_MODE,aPublic);
byte[] bytes2 = cipher.doFinal(bytes);
System.out.println(new String (bytes2));
}