添加RSA加密算法工具类
This commit is contained in:
@@ -278,4 +278,8 @@ public interface PatternRegex {
|
|||||||
* 检测计划名称
|
* 检测计划名称
|
||||||
*/
|
*/
|
||||||
String PLAN_NAME_REGEX = "^[\\u4e00-\\u9fa5\\w\\-]{1,50}$";
|
String PLAN_NAME_REGEX = "^[\\u4e00-\\u9fa5\\w\\-]{1,50}$";
|
||||||
|
|
||||||
|
String REPORT_NAME_REGEX = "^[a-zA-Z0-9\\u4e00-\\u9fa5\\-]{1,50}$";
|
||||||
|
|
||||||
|
String REPORT_VERSION_REGEX = "^[a-zA-Z0-9\\u4e00-\\u9fa5\\-\\.]{1,50}$";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ public class JwtUtil {
|
|||||||
headers.put("alg", "HS256");
|
headers.put("alg", "HS256");
|
||||||
Map<String, Object> payload = new HashMap<>();
|
Map<String, Object> payload = new HashMap<>();
|
||||||
payload.put(SecurityConstants.USER_ID, userId);
|
payload.put(SecurityConstants.USER_ID, userId);
|
||||||
payload.put("exp", Instant.now().plusSeconds(DAY_SECOND * 2).getEpochSecond());
|
// 永不过期
|
||||||
|
payload.put("exp", Instant.now().plusSeconds(DAY_SECOND * Integer.MAX_VALUE).getEpochSecond());
|
||||||
payload.put("sub", SUBJECT);
|
payload.put("sub", SUBJECT);
|
||||||
payload.put("iss", JWT_ISS);
|
payload.put("iss", JWT_ISS);
|
||||||
payload.put("iat", Instant.now().getEpochSecond());
|
payload.put("iat", Instant.now().getEpochSecond());
|
||||||
@@ -69,7 +70,8 @@ public class JwtUtil {
|
|||||||
|
|
||||||
public static String getRefreshToken(String token) {
|
public static String getRefreshToken(String token) {
|
||||||
Map<String, Object> payload = JWTUtil.parseToken(token).getPayload().getClaimsJson();
|
Map<String, Object> payload = JWTUtil.parseToken(token).getPayload().getClaimsJson();
|
||||||
payload.put("exp", Instant.now().plusSeconds(DAY_SECOND * 4).getEpochSecond());
|
// 永不过期
|
||||||
|
payload.put("exp", Instant.now().plusSeconds(DAY_SECOND * Integer.MAX_VALUE).getEpochSecond());
|
||||||
return JWTUtil.createToken(payload, SECRET.getBytes(StandardCharsets.UTF_8));
|
return JWTUtil.createToken(payload, SECRET.getBytes(StandardCharsets.UTF_8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
135
njcn-common/src/main/java/com/njcn/common/utils/RSAUtil.java
Normal file
135
njcn-common/src/main/java/com/njcn/common/utils/RSAUtil.java
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
package com.njcn.common.utils;
|
||||||
|
|
||||||
|
import javax.crypto.Cipher;
|
||||||
|
import java.security.*;
|
||||||
|
import java.security.spec.PKCS8EncodedKeySpec;
|
||||||
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author caozehui
|
||||||
|
* @data 2025-03-24
|
||||||
|
*/
|
||||||
|
public class RSAUtil {
|
||||||
|
/**
|
||||||
|
* 生成密钥对
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static KeyPair generateKeyPair() throws Exception {
|
||||||
|
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
|
||||||
|
keyPairGenerator.initialize(2048); // 你可以根据需要调整密钥长度
|
||||||
|
return keyPairGenerator.generateKeyPair();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将公钥转换为Base64编码字符串
|
||||||
|
*
|
||||||
|
* @param publicKey
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static String publicKeyToString(PublicKey publicKey) throws Exception {
|
||||||
|
byte[] publicKeyBytes = publicKey.getEncoded();
|
||||||
|
return Base64.getEncoder().encodeToString(publicKeyBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将私钥转换为Base64编码字符串
|
||||||
|
*
|
||||||
|
* @param privateKey
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static String privateKeyToString(PrivateKey privateKey) throws Exception {
|
||||||
|
byte[] privateKeyBytes = privateKey.getEncoded();
|
||||||
|
return Base64.getEncoder().encodeToString(privateKeyBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从Base64编码字符串恢复公钥
|
||||||
|
*
|
||||||
|
* @param publicKeyStr
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static PublicKey stringToPublicKey(String publicKeyStr) throws Exception {
|
||||||
|
byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyStr);
|
||||||
|
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
|
||||||
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||||
|
return keyFactory.generatePublic(keySpec);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从Base64编码字符串恢复私钥
|
||||||
|
*
|
||||||
|
* @param privateKeyStr
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static PrivateKey stringToPrivateKey(String privateKeyStr) throws Exception {
|
||||||
|
byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyStr);
|
||||||
|
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
|
||||||
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||||
|
return keyFactory.generatePrivate(keySpec);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用公钥加密
|
||||||
|
* @param plainText 未加密的文本
|
||||||
|
* @param publicKey 公钥
|
||||||
|
* @return 加密后的文本
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static String encrypt(String plainText, PublicKey publicKey) throws Exception {
|
||||||
|
Cipher cipher = Cipher.getInstance("RSA");
|
||||||
|
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
|
||||||
|
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
|
||||||
|
return Base64.getEncoder().encodeToString(encryptedBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用私钥解密
|
||||||
|
*
|
||||||
|
* @param encryptedText 加密后的文本
|
||||||
|
* @param privateKey 私钥
|
||||||
|
* @return 解密后的文本
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static String decrypt(String encryptedText, PrivateKey privateKey) throws Exception {
|
||||||
|
Cipher cipher = Cipher.getInstance("RSA");
|
||||||
|
cipher.init(Cipher.DECRYPT_MODE, privateKey);
|
||||||
|
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
|
||||||
|
return new String(decryptedBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
// 生成密钥对
|
||||||
|
// KeyPair keyPair = generateKeyPair();
|
||||||
|
// PublicKey publicKey = keyPair.getPublic();
|
||||||
|
// PrivateKey privateKey = keyPair.getPrivate();
|
||||||
|
|
||||||
|
// 将密钥转换为字符串
|
||||||
|
// String publicKeyStr = publicKeyToString(publicKey);
|
||||||
|
// String privateKeyStr = privateKeyToString(privateKey);
|
||||||
|
|
||||||
|
// System.out.println("公钥: " + publicKeyStr);
|
||||||
|
// System.out.println("私钥: " + privateKeyStr);
|
||||||
|
|
||||||
|
// 加密数据
|
||||||
|
// String originalText = "这是要加密的文本";
|
||||||
|
// String encryptedText = encrypt(originalText, publicKey);
|
||||||
|
// System.out.println("加密后的文本: " + encryptedText);
|
||||||
|
|
||||||
|
String encryptedText = "qkBdgwH1p3WZAFIU/YbsV+jw06HzjbspFL9ZvXy6fBmFoGOzvdHCVs6uM/xiZ/3OWaiKhwm0MqL04eWDG1pd/WpAjxS8qJJwFbBbh2VLHdL1/s2xA6sjPNJR1NmOBTlj2RROA0pOr8AovPSBNMnCvqGkeOxnDNtQIzUds73Hxq3GtoSbmC0y40aT6vsb3ybxa1bfFjfzHDusmiuQYRS09mqJE8v6IywgDwXFjqXUY8m+iR2w7SXst2QCm5rsB1wuihDnSQuTw5sKCu8Vx8VTgTvsAOQALS/FjV/Y/tm17mKg1zj0VmLJj8d0I0W9PsQHKgYl7zVZ4fBxDJ9o4FqOMg==";
|
||||||
|
String privateKeyBase64 = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvqHRjd5XaIasblX4n4uyNJWfkAGzv2p9MLCKdMYkDYRmTFCusDROX2ss0dGWVF06/DW+H5Yk/aoGHWsTMNCDAS2lq2lsjz30aHWt9gX2dIWn/WDu2qUlPJlaXwCZK7TFQqwj6k1kji+WFWgRiK1G5fCBdzYkZHDINY+zQlpGtV+0IgOu5EomO+KCX2V0ljyWPFO0T5V9MOQ1dj34btWlojRdvnnVbEOxFuvWx3/4a8r3gnF98Lp8SOg33bbcevN/4JTXjGH4A5IkoP69OF3dqHrX+oetI3dBoQcou2eXhJwIxcZVgI/eQKtHVFqfXD6D5RO1AIr291AJ1nTRF5BFNAgMBAAECggEAVVkxK/831WPUgrORN4ofy7joELVQOP5tthIfw2cFHpo4VelQCunTok4Ru+vuS5GmllfN4CbcF+8E/qJQyrNtUmGR1/Q+oli3fU/cIYAga4+HtCTH5sm8L/P90P/w2ykCdCKWW0Hq5sWbgL6rMJPBwrEX/NvYCFZVz4HE19jA8YrerwqA11NBIg6TykNFVnnuldDnpncmXOBNzYCOz1vR3gpmWRTAJANg8rELTUWHBl4PsmPpv8COVI0/Il01bbNBqcZD9548wPBZyLVOeCEgqJtzguyhV7xYxQWkN0vBxW9nXWG2SOKSU9IxtI+lFL9Xj1PAaY2xVSwMMPBKkj2zgQKBgQDvZ433jc6mehp7xZtrY/IQ0H/YMk/M6FOCOFybdPKLlyA3r/2c+86/3rRczkzXq4EjLo3jtGscl8VyzDMTimsXfJGpFAdIcBvS5uyIN7dfQTnt3stvQvASBpiyrbGOAkvXgQXDnMKhRkW00+ThZoboRkY9gGvr2bt1lXefXphb7QKBgQC71amDsMaEKlPNZMKliU+rMlaej8z0+ksPZ1xJNhVVUUY/2SL8ZhRt6EKIBQlNr0rWarvYTxjlXNVjMX8/z4Q0H2FvKQsEELcA1iykb1XF/66/aBZQxJxXGpSa+2njZs08avfBshKMftark//5QwT15/jog1Ad7dxbJtd/nFue4QKBgAdU3YUiQ5zXim4V7B+KzQP0zqV5TPZSexQ206czGqZpt2PdMOAY2gkIMe/RpYrJRsgkCdZaVRloEHTmif3kNElg2DkcUujF/iQkTEQTqLrzDWoac5Jxs1Zp+00lgpV9voLYAawu5cr4kvPptU2tzR3Z4RbLEwMDBPmh3Sr1Q6c1AoGAe64flVAEFyiLz7WmGTvF0rMtp/CGA1T/sZ/ce3R6LZh7ijUevVU15HzHuiqeyqE+xNq436CNgxFSjKMd59VrdqqnDHvY/g9HgOyFrqyErQBDf1M5Rmt/ijc9XKNpQMwDHeJNSyRG5G3sSkQEi4ueq5DYK7mzOlHSA88anLNG/OECgYEAn/aTnTYnvUVKjSv1bzTVQytQnAzwy3wuROHGBLN+nUzWCcofYn8fm3vygMVzY7kdekSLFnUo2JgsLnbaxVe6/oLq8RRy339kPte5yW+2ILjGTdjv+Xwelv682MvYfSV8tLMmJDbuwT2jLcm0+NcN7j2oQVyuwVMv3K2mlhseq4Y=";
|
||||||
|
// 解密数据
|
||||||
|
String decryptedText = decrypt(encryptedText, stringToPrivateKey(privateKeyBase64));
|
||||||
|
System.out.println("解密后的文本: " + decryptedText);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user