没找到好的,还是自己写把
需要加一下依赖
commons-codec commons-codec1.15
不BB废话,直上代码
import org.apache.commons.codec.binary.base64;
import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.spec.EncodedKeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
public class RSAUtil {
private static final String RSA = "RSA";
public static void main(String[] args) throws Exception {
RsaKeyPair keyPair = generateKeyPair();
System.out.println("公钥: " + keyPair.publicKey);
System.out.println("私钥: " + keyPair.privateKey);
String str = "曾特喵穷啊";
System.out.println("明文: " + str);
System.out.println("----------------------------");
String encodePublic = encryptByPublicKey(keyPair.publicKey, str);
System.out.println("公钥加密: " + encodePublic);
String decodePrivate = decryptByPrivateKey(keyPair.privateKey, encodePublic);
System.out.println("私钥解密: " + decodePrivate);
System.out.println("----------------------------");
String encodePrivate = encryptByPrivateKey(keyPair.privateKey, str);
System.out.println("私钥加密: " + encodePrivate);
String decodePublic = decryptByPublicKey(keyPair.publicKey, encodePrivate);
System.out.println("公钥解密: " + decodePublic);
}
public static String encryptByPublicKey(String publicKeyStr, String data) throws Exception {
Cipher cipher = cipherInstance(Cipher.ENCRYPT_MODE, false, publicKeyStr);
byte[] result = cipher.doFinal(data.getBytes());
return base64.encodebase64URLSafeString(result);
}
public static String decryptByPublicKey(String publicKeyStr, String data) throws Exception {
Cipher cipher = cipherInstance(Cipher.DECRYPT_MODE, false, publicKeyStr);
byte[] result = cipher.doFinal(base64.decodebase64(data));
return new String(result, StandardCharsets.UTF_8);
}
public static String decryptByPrivateKey(String privateKeyStr, String data) throws Exception {
Cipher cipher = cipherInstance(Cipher.DECRYPT_MODE, true, privateKeyStr);
byte[] result = cipher.doFinal(base64.decodebase64(data));
return new String(result, StandardCharsets.UTF_8);
}
public static String encryptByPrivateKey(String privateKeyStr, String data) throws Exception {
Cipher cipher = cipherInstance(Cipher.ENCRYPT_MODE, true, privateKeyStr);
byte[] result = cipher.doFinal(data.getBytes());
return base64.encodebase64URLSafeString(result);
}
public static Cipher cipherInstance(int mode, boolean isPrivateKey, String keyStr) throws Exception {
KeyFactory factory = KeyFactory.getInstance(RSA);
EncodedKeySpec keySpec;
Key key;
if (isPrivateKey) {
keySpec = new PKCS8EncodedKeySpec(base64.decodebase64(keyStr));
key = factory.generatePrivate(keySpec);
} else {
keySpec = new X509EncodedKeySpec(base64.decodebase64(keyStr));
key = factory.generatePublic(keySpec);
}
//
Cipher cipher = Cipher.getInstance(RSA);
cipher.init(mode, key);
return cipher;
}
public static RsaKeyPair generateKeyPair() throws NoSuchAlgorithmException {
return generateKeyPair(1024);
}
public static RsaKeyPair generateKeyPair(int keySize) throws NoSuchAlgorithmException {
KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA);
// 密钥长度
kpg.initialize(keySize);
// 生成密钥对
KeyPair keyPair = kpg.generateKeyPair();
// 公钥
Key publicKey = keyPair.getPublic();
String publicKeyStr = base64.encodebase64URLSafeString(publicKey.getEncoded());
// 公钥
Key privateKey = keyPair.getPrivate();
String privateKeyStr = base64.encodebase64URLSafeString(privateKey.getEncoded());
return new RsaKeyPair(publicKeyStr, privateKeyStr);
}
public static class RsaKeyPair {
private final String publicKey;
private final String privateKey;
public RsaKeyPair(String publicKey, String privateKey) {
this.publicKey = publicKey;
this.privateKey = privateKey;
}
public String getPublicKey() {
return publicKey;
}
public String getPrivateKey() {
return privateKey;
}
}
}
觉得行,就点个赞



