package com.ruoyi.common.utils;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Component;
|
|
import javax.crypto.Cipher;
|
import java.io.UnsupportedEncodingException;
|
import java.net.URLDecoder;
|
import java.net.URLEncoder;
|
import java.nio.charset.StandardCharsets;
|
import java.security.KeyFactory;
|
import java.security.PrivateKey;
|
import java.security.PublicKey;
|
import java.security.spec.PKCS8EncodedKeySpec;
|
import java.security.spec.X509EncodedKeySpec;
|
import java.util.Base64;
|
|
@Slf4j
|
@Component
|
public class RSAPublicKeyExample {
|
|
|
/**
|
* 数据解密
|
*
|
* @param encryptedData
|
* @return
|
*/
|
public String decryptedData(String encryptedData, String pri_key) {
|
String privateKeyString = "私钥的Base64编码字符串"; // 后端私钥的Base64编码字符串
|
|
try {
|
// 将私钥Base64编码字符串转换为PrivateKey对象
|
byte[] privateKeyBytes = Base64.getDecoder().decode(pri_key);
|
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
|
|
// 使用私钥解密数据
|
Cipher decryptCipher = Cipher.getInstance("RSA");
|
decryptCipher.init(Cipher.DECRYPT_MODE, privateKey);
|
byte[] decryptedBytes = decryptCipher.doFinal(Base64.getDecoder().decode(encryptedData));
|
|
// 解密后的数据
|
String decryptedData = new String(decryptedBytes);
|
System.out.println("解密后的数据:" + decryptedData);
|
return decryptedData;
|
} catch (Exception e) {
|
log.error("解密报错了:{}", e.getMessage());
|
}
|
return null;
|
}
|
|
/**
|
* 要加密的明文数据
|
*
|
* @param plainText
|
* @return
|
*/
|
public String encryptedData(String plainText, String pub_key) {
|
log.error("需要加密的数据:{}", plainText);
|
try {
|
|
byte[] publicKeyBytes = Base64.getDecoder().decode(pub_key);
|
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
PublicKey publicKey = keyFactory.generatePublic(keySpec);
|
|
// 使用公钥加密数据
|
Cipher encryptCipher = Cipher.getInstance("RSA");
|
encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey);
|
byte[] encryptedBytes = encryptCipher.doFinal(plainText.getBytes());
|
|
// 将加密后的数据转换为Base64编码的字符串
|
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
|
log.error("Base64加密后的数据:{}", encryptedText);
|
encryptedText = URLEncoder.encode(encryptedText, StandardCharsets.UTF_8.toString());
|
log.error("URLEncoder编码后的数据:{}", encryptedText);
|
String decodedString = URLDecoder.decode(encryptedText, "UTF-8");
|
log.error("URLEncoder解码后的数据:{}", decodedString);
|
return encryptedText;
|
} catch (Exception e) {
|
log.error("加密失败了:{}", e.getMessage());
|
}
|
return null;
|
}
|
|
public static void main(String[] args) {
|
String decodedString = null;
|
try {
|
decodedString = URLDecoder.decode("0902%E4%BB%BB%E5%8A%A1%E6%B5%8B%E8%AF%95--------", "UTF-8");
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
System.out.println(decodedString);
|
}
|
|
}
|