感興趣的同學自己觀看,使用JDK自帶
public static void RSA() throws Exception {
//1.生成公私鑰匙
//KeyPairGenerator 類用于生成公鑰和私鑰對。密鑰對生成器是使用 getInstance 工廠方法(返回一個給定類的實例的靜態方法)構造的。
//特定算法的密鑰對生成器可以創建能夠與此算法一起使用的公鑰/私鑰對。它還可以將特定于算法的參數與每個生成的密鑰關聯。
//initialize(int keysize) 初始化確定密鑰大小的密鑰對生成器,使用默認的參數集合,
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPrivateKey rsaprivateKey = (RSAPrivateKey) keyPair.getPrivate();
RSAPublicKey rsapublicKey = (RSAPublicKey) keyPair.getPublic();
System.out.println("私鑰匙:" + Base64Utils.encodeToString(rsaprivateKey.getEncoded()));
System.out.println("公鑰:" + Base64Utils.encodeToString(rsapublicKey.getEncoded()));
//2.私鑰加密,
//PKCS8EncodedKeySpec 進行編碼的專用密鑰的 ASN.1 編碼
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaprivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
//Cipher.ENCRYPT_MODE, 用于將 Cipher 初始化為加密模式的常量。
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(text.getBytes());
System.out.println("私鑰加密:" + Base64Utils.encodeToString(result));
//3.公鑰解密
// X509EncodedKeySpec 進行編碼的公用密鑰的 ASN.1 編碼
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsapublicKey.getEncoded());
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
//Cipher.DECRYPT_MODE 用于將 Cipher 初始化為解密模式的常量。
cipher.init(Cipher.DECRYPT_MODE, publicKey);
result = cipher.doFinal(result);
System.out.println("公鑰解密:" + new String(result));
//TODO 使用SHA256加密解密
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(text.getBytes());
result = signature.sign();
System.out.println("SHA256withRSA加密:" + Base64Utils.encodeToString(result));
signature.initVerify(publicKey);
signature.update(text.getBytes());
boolean flag = signature.verify(result);
System.out.println("SHA256withRSA解密:" + flag);
}