一:Java测试
二:pom
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15to18</artifactId> <version>1.66</version> </dependency>
三:工具类
public class RsaUtils { static { Security.addProvider(new BouncyCastleProvider()); } public KeyPair genePublicPrivate() throws Exception { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); // 初始化密码生感器 keyPairGenerator.initialize(512, new SecureRandom()); //生成密钥对 KeyPair keyPair = keyPairGenerator.generateKeyPair(); //获公钥 PublicKey publicKey = keyPair.getPublic(); // 获私钥 PrivateKey privateKey = keyPair.getPrivate(); System.out.println(getPublicKeyStr(publicKey));//公钥字符串 System.err.println(getPrivateKeyStr(privateKey));//私钥字符串 return keyPair; } public static PublicKey getPublicKey(String key) throws Exception { byte[] keyBytes = Base64.getDecoder().decode(key); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(keySpec); return publicKey; } public static PrivateKey getPrivateKey(String key) throws Exception { byte[] keyBytes; keyBytes = Base64.getDecoder().decode(key); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(keySpec); return privateKey; } public static byte[] encrypt(byte[] bt_plaintext,String pubkey) throws Exception { PublicKey publicKey = getPublicKey(pubkey); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] bt_encrypted = cipher.doFinal(bt_plaintext); return bt_encrypted; } public static byte[] decrypt(byte[] bt_encrypted,String prikey) throws Exception { PrivateKey privateKey = getPrivateKey(prikey); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] bt_original = cipher.doFinal(bt_encrypted); return bt_original; } /** * 获取私钥字符串 * * @return 当前的私钥字符串 */ public static String getPrivateKeyStr(PrivateKey privateKey) { KeyFactory keyFactory = null; String privateKeyStr = null; try { keyFactory = KeyFactory.getInstance("RSA"); PKCS8EncodedKeySpec keySpec = keyFactory.getKeySpec(privateKey, PKCS8EncodedKeySpec.class); byte[] buffer = keySpec.getEncoded(); privateKeyStr = Base64.getEncoder().encodeToString(buffer); } catch (NoSuchAlgorithmException e) { System.err.println(e); } catch (InvalidKeySpecException e) { System.err.println(e); } return privateKeyStr; } /** * 获取公钥字符串 * * @return 当前的公钥字符串 */ public static String getPublicKeyStr(PublicKey publicKey) { KeyFactory keyFactory = null; String publicKeyStr = null; try { keyFactory = KeyFactory.getInstance("RSA"); X509EncodedKeySpec keySpec = keyFactory.getKeySpec(publicKey, X509EncodedKeySpec.class); byte[] buffer = keySpec.getEncoded(); publicKeyStr = Base64.getEncoder().encodeToString(buffer); } catch (NoSuchAlgorithmException e) { System.err.println(e); } catch (InvalidKeySpecException e) { System.err.println(e); } return publicKeyStr; } }