依赖
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
<optional>true</optional>
</dependency>
代码
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
@Slf4j
public class RsaUtil {
private static final String PUBLIC_KEY_DEFAULT = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlty0Ddpevqk2QpGDh1O4mfnMNFfrf60ln0Qsd3Z+eWh5yj/B15WtBPtb3s2Auftttjr6xjM9s2e+mPJBUp9Q99DdTMS0vcuwDDvDFT7vHb73vuf4wX98s1Mrvj87i10HL33M0DlE9DmWeDAC8nI8+YynCxKb6qNKLMPedq9WPwmvG8nSZa5NeOMcypdvrs8hY8JDaAtt1vGlIVYsTTd7X6ZHxdcGHPr0Qm9FCUaGdJdJH8xQ7xRn7eBoK6yMKJ+oYxqDaxPsqsRfMo6eXSDOrbIKSIvwAFeZZPK9ppLbz8/0kXfooJW1CbA0ufC5+mwv32akAFdddHCr1fEy6pu2hwIDAQAB";
private static final String PRIVATE_KEY_DEFAULT = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCW3LQN2l6+qTZCkYOHU7iZ+cw0V+t/rSWfRCx3dn55aHnKP8HXla0E+1vezYC5+222OvrGMz2zZ76Y8kFSn1D30N1MxLS9y7AMO8MVPu8dvve+5/jBf3yzUyu+PzuLXQcvfczQOUT0OZZ4MALycjz5jKcLEpvqo0osw952r1Y/Ca8bydJlrk144xzKl2+uzyFjwkNoC23W8aUhVixNN3tfpkfF1wYc+vRCb0UJRoZ0l0kfzFDvFGft4GgrrIwon6hjGoNrE+yqxF8yjp5dIM6tsgpIi/AAV5lk8r2mktvPz/SRd+iglbUJsDS58Ln6bC/fZqQAV110cKvV8TLqm7aHAgMBAAECggEAbh9W85HGfUiJihgsObl8VDFKxZ60EjPy9YpPJzkA42DHHkJiHhts++j7y+yYnaoSEOaGre0zieUd9QlJc6VF9k+pauNfx/eKX7O0GKsi4sTGlb1BEQYdoc0BblM8BOP4XctnmUtksR3kX4E0dYO8TLFGMkf4NlPRzlF/74TX4RTxaJgFhDKefIr7Oshwq8rEb1vvXXR/CdgSysU2Zg8mY0dz0kFKrCRMVMUKCA5b++mPgf91jVn1MCueu+Bl8YHepBOx+p/RTZ4afSSzIT3/BLD+QffFiHrw2xMpa6DcMWgQTZSXqQr9tquXE8n9ffYn+QhC8UnXuKL6WOPYG7UBaQKBgQDX3Jzxa9vZbrCX3q7GNKZz9prexON4eUR2y0Hyu/9NmVeMI5CR5j4eAb11DXMuVZih++LGBdL5Vz1MEr50M8SdrVV+ws8kno/eNja4JrrdjyKSs7f8sdzPO5s6iHcuiqC6tjrXILCJU9WtBwB0fOxB9m73cNNytfBaDHp6k7PpjQKBgQCy6f8kDDP4rQSvzBjkBNs/n2v+IEZxK98a5VfwaI62RdnSrDegPenzeGj/pEbIKM+5qdbIjxbPvYKIGuHvud01U/OjZWJThWuQCD5cilUYOmyrAeRrQnKKpEV7JpKE4fhnVr8oIHObbPDXRp910WNoSDrRFeR7FkpnyAzL+yg5YwKBgF9tG8RuViZtFIxO2RyuMdeZ8SUCDT04/tc1S9Yu3dJEM7u0DTkye8twIX0ZkQ2usWcKn1nDQV0Q//wdXSyppgW+lskO/dvGbPtjJBWMqZdAq5wG7xM63c6PHzRlF6rvhdaEsMZhoSlUcmWnbsAQabFPbAbfTdqsK7DjS1Hc8fARAoGAfbIt4Up9fNk5cLSoTBIpYuKDAY/1TW8wGHpGNQ2QLfiXFw6NKhQ1eCsBQZFNdTRO9DahQlhdA2g1+58/WqevBNdNVV9WHC2hKxjPjz5UmGf7jo0OyFhvln3gnquzxo3ncdqdA/kAn5KDBguE3kZUW6BbSifiVKONdKo0a16xnNcCgYA0J0fSy1syK7tzBDt1yXP5IUOEm81/JtNuIiB0ycGA6b52MsYR3HbxLmjvFtz5ZnJT2/yaQp9KcnEcpCAYpjJ1zoacWIJ+WKCjlaFA6IoDziROmmipbn3Iriv8Dm6MVZxpLXu2M687QIa6BHiFzvHZodT2hxV3g0TY7oR/+3Rhjw==";
public static String decryptByPrivateKey(String privateKeyStr, String text) {
try {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyStr));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
return new String(result);
} catch (Exception e) {
log.error("decryptByPrivateKey error: ", e);
}
return null;
}
public static String decryptByPrivateKey(String text) {
return decryptByPrivateKey(PRIVATE_KEY_DEFAULT, text);
}
public static String decryptByPublicKey(String publicKeyStr, String text) {
try {
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyStr));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
return new String(result);
} catch (Exception e) {
log.error("decryptByPublicKey error: ", e);
}
return null;
}
public static String decryptByPublicKey(String text) {
return decryptByPublicKey(PUBLIC_KEY_DEFAULT, text);
}
public static String encryptByPrivateKey(String privateKeyStr, String text) {
try {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyStr));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(text.getBytes());
return Base64.encodeBase64String(result);
} catch (Exception e) {
log.error("encryptByPrivateKey error: ", e);
}
return null;
}
public static String encryptByPrivateKey(String text) {
return encryptByPrivateKey(PRIVATE_KEY_DEFAULT, text);
}
public static String encryptByPublicKey(String publicKeyStr, String text) {
try {
X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyStr));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(text.getBytes());
return Base64.encodeBase64String(result);
} catch (Exception e) {
log.error("encryptByPublicKey error: ", e);
}
return null;
}
public static String encryptByPublicKey(String text) {
return encryptByPublicKey(PUBLIC_KEY_DEFAULT, text);
}
@Getter
@ToString
@AllArgsConstructor
public static class RsaKeyPair {
private final String publicKey;
private final String privateKey;
}
public static RsaKeyPair generateKeyPair() {
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded());
String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
return new RsaKeyPair(publicKeyString, privateKeyString);
} catch (Exception e) {
log.error("generateKeyPair error: ", e);
}
return null;
}
public static void main(String[] args) {
RsaKeyPair keyPair = generateKeyPair();
System.out.println("publicKey: " + keyPair.getPublicKey());
System.out.println("privateKey: " + keyPair.getPrivateKey());
System.out.println();
String s = "私钥加密公钥解密 jx9j2jjkxw2xwx2`,z.;m,=4;'x..";
System.out.println("加密前:" + s);
String encryptByPrivateKey = encryptByPrivateKey(keyPair.getPrivateKey(), s);
System.out.println("加密后: " + encryptByPrivateKey);
System.out.println("解密后:" + decryptByPublicKey(keyPair.getPublicKey(), encryptByPrivateKey));
System.out.println();
s = "公钥加密私钥解密 28sis9ks202osmkzi2m[[1;a=`93.6=.";
System.out.println("加密前:" + s);
String encryptByPublicKey = encryptByPublicKey(keyPair.getPublicKey(), s);
System.out.println("加密后: " + encryptByPublicKey);
System.out.println("解密后:" + decryptByPrivateKey(keyPair.getPrivateKey(), encryptByPublicKey));
}
}