一: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;
}
}