|
|
@@ -1,6 +1,7 @@
|
|
|
package common.utils.hyg;
|
|
|
|
|
|
import com.jfinal.kit.StrKit;
|
|
|
+import common.jfinal.AppConfig;
|
|
|
|
|
|
import javax.crypto.Cipher;
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
@@ -286,64 +287,64 @@ public class RSAUtils {
|
|
|
String publicKey = getPublicKey(keyMap);
|
|
|
String privateKey = getPrivateKey(keyMap);
|
|
|
|
|
|
- System.out.println("--- RSA 密钥对生成 ---");
|
|
|
- System.out.println("公钥 (Base64编码):\n" + publicKey);
|
|
|
- System.out.println("私钥 (Base64编码):\n" + privateKey);
|
|
|
- System.out.println("----------------------\n");
|
|
|
+ AppConfig.LOGGER.info("--- RSA 密钥对生成 ---");
|
|
|
+ AppConfig.LOGGER.info("公钥 (Base64编码):\n" + publicKey);
|
|
|
+ AppConfig.LOGGER.info("私钥 (Base64编码):\n" + privateKey);
|
|
|
+ AppConfig.LOGGER.info("----------------------\n");
|
|
|
|
|
|
String originalContent = "这是一段需要使用RSA加密和签名的中文文本,包含较长的内容,以测试分段处理。Hello World! 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
|
- System.out.println("原始数据: " + originalContent);
|
|
|
+ AppConfig.LOGGER.info("原始数据: " + originalContent);
|
|
|
byte[] dataBytes = originalContent.getBytes(StandardCharsets.UTF_8);
|
|
|
|
|
|
// 2. 公钥加密,私钥解密 (实现数据机密性)
|
|
|
- System.out.println("--- 公钥加密,私钥解密 ---");
|
|
|
+ AppConfig.LOGGER.info("--- 公钥加密,私钥解密 ---");
|
|
|
byte[] encryptedByPublicKey = encryptByPublicKey(dataBytes, publicKey);
|
|
|
- System.out.println("公钥加密后的数据 (Base64编码): " + Base64.getEncoder().encodeToString(encryptedByPublicKey));
|
|
|
+ AppConfig.LOGGER.info("公钥加密后的数据 (Base64编码): " + Base64.getEncoder().encodeToString(encryptedByPublicKey));
|
|
|
|
|
|
byte[] decryptedByPrivateKey = decryptByPrivateKey(encryptedByPublicKey, privateKey);
|
|
|
String decryptedString = new String(decryptedByPrivateKey, StandardCharsets.UTF_8);
|
|
|
- System.out.println("私钥解密后的数据: " + decryptedString);
|
|
|
- System.out.println("验证一致性: " + originalContent.equals(decryptedString));
|
|
|
- System.out.println("----------------------\n");
|
|
|
+ AppConfig.LOGGER.info("私钥解密后的数据: " + decryptedString);
|
|
|
+ AppConfig.LOGGER.info("验证一致性: " + originalContent.equals(decryptedString));
|
|
|
+ AppConfig.LOGGER.info("----------------------\n");
|
|
|
|
|
|
// 3. 私钥加密,公钥解密 (实现数字签名,通常不用于传输数据)
|
|
|
- System.out.println("--- 私钥加密,公钥解密 (常用于签名验证) ---");
|
|
|
+ AppConfig.LOGGER.info("--- 私钥加密,公钥解密 (常用于签名验证) ---");
|
|
|
byte[] encryptedByPrivateKey = encryptByPrivateKey(dataBytes, privateKey);
|
|
|
- System.out.println("私钥加密后的数据 (Base64编码): " + Base64.getEncoder().encodeToString(encryptedByPrivateKey));
|
|
|
+ AppConfig.LOGGER.info("私钥加密后的数据 (Base64编码): " + Base64.getEncoder().encodeToString(encryptedByPrivateKey));
|
|
|
|
|
|
byte[] decryptedByPublicKey = decryptByPublicKey(encryptedByPrivateKey, publicKey);
|
|
|
String decryptedString2 = new String(decryptedByPublicKey, StandardCharsets.UTF_8);
|
|
|
- System.out.println("公钥解密后的数据: " + decryptedString2);
|
|
|
- System.out.println("验证一致性: " + originalContent.equals(decryptedString2));
|
|
|
- System.out.println("----------------------\n");
|
|
|
+ AppConfig.LOGGER.info("公钥解密后的数据: " + decryptedString2);
|
|
|
+ AppConfig.LOGGER.info("验证一致性: " + originalContent.equals(decryptedString2));
|
|
|
+ AppConfig.LOGGER.info("----------------------\n");
|
|
|
|
|
|
// 4. 数字签名与验证 (主流用法)
|
|
|
- System.out.println("--- 数字签名与验证 ---");
|
|
|
+ AppConfig.LOGGER.info("--- 数字签名与验证 ---");
|
|
|
String sign = sign(dataBytes, privateKey);
|
|
|
- System.out.println("生成的签名 (Base64编码): " + sign);
|
|
|
+ AppConfig.LOGGER.info("生成的签名 (Base64编码): " + sign);
|
|
|
|
|
|
// 验证正确的签名
|
|
|
boolean verified = verify(dataBytes, publicKey, sign);
|
|
|
- System.out.println("验证签名结果 (正确数据与签名): " + verified);
|
|
|
+ AppConfig.LOGGER.info("验证签名结果 (正确数据与签名): " + verified);
|
|
|
|
|
|
// 验证篡改后的数据
|
|
|
byte[] tamperedData = "这是被篡改的数据".getBytes(StandardCharsets.UTF_8);
|
|
|
boolean tamperedVerified = verify(tamperedData, publicKey, sign);
|
|
|
- System.out.println("验证签名结果 (篡改数据与原签名): " + tamperedVerified);
|
|
|
+ AppConfig.LOGGER.info("验证签名结果 (篡改数据与原签名): " + tamperedVerified);
|
|
|
|
|
|
// 验证错误的签名
|
|
|
String wrongSign = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
|
|
|
try {
|
|
|
boolean wrongSignVerified = verify(dataBytes, publicKey, wrongSign);
|
|
|
- System.out.println("验证签名结果 (正确数据与错误签名): " + wrongSignVerified);
|
|
|
+ AppConfig.LOGGER.info("验证签名结果 (正确数据与错误签名): " + wrongSignVerified);
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
- System.out.println("验证签名结果 (正确数据与错误签名): Base64解码错误,签名非法。");
|
|
|
+ AppConfig.LOGGER.info("验证签名结果 (正确数据与错误签名): Base64解码错误,签名非法。");
|
|
|
}
|
|
|
|
|
|
- System.out.println("----------------------\n");
|
|
|
+ AppConfig.LOGGER.info("----------------------\n");
|
|
|
|
|
|
// 5. sortParam 方法测试
|
|
|
- System.out.println("--- sortParam 方法测试 ---");
|
|
|
+ AppConfig.LOGGER.info("--- sortParam 方法测试 ---");
|
|
|
Map<String, Object> params = new TreeMap<>();
|
|
|
params.put("appKey", "123");
|
|
|
params.put("timestamp", System.currentTimeMillis());
|
|
|
@@ -353,13 +354,13 @@ public class RSAUtils {
|
|
|
params.put("paramD", ""); // 测试空字符串
|
|
|
|
|
|
String sortedAndConcatenated = sortParam(params);
|
|
|
- System.out.println("原始参数Map: " + params);
|
|
|
- System.out.println("排序拼接结果: " + sortedAndConcatenated);
|
|
|
+ AppConfig.LOGGER.info("原始参数Map: " + params);
|
|
|
+ AppConfig.LOGGER.info("排序拼接结果: " + sortedAndConcatenated);
|
|
|
|
|
|
- System.out.println("----------------------\n");
|
|
|
+ AppConfig.LOGGER.info("----------------------\n");
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
- System.err.println("发生了一个错误: " + e.getMessage());
|
|
|
+ AppConfig.LOGGER.error("发生了一个错误: " + e.getMessage());
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|