This commit is contained in:
kk
2026-07-08 17:57:11 +08:00
commit f1e6599892
743 changed files with 159169 additions and 0 deletions
@@ -0,0 +1,47 @@
package org.springblade.test;
import org.springblade.core.tool.utils.AesUtil;
import org.springblade.core.tool.utils.DesUtil;
import org.springblade.core.tool.utils.StringPool;
/**
* Key生成器
*
* @author Chill
*/
public class CryptoKeyGenerator {
public static void main(String[] args) {
String cryptoKey = AesUtil.genAesKey();
String aesKey = AesUtil.genAesKey();
String desKey = DesUtil.genDesKey();
System.out.println("=========== blade.token.crypto-key 配置如下 ============");
System.out.println("#blade配置\n" +
"blade:\n" +
" token:\n" +
" crypto-key: " + cryptoKey);
System.out.println("=======================================================");
System.out.println(StringPool.EMPTY);
System.out.println("============== blade.api.crypto 配置如下 ===============");
System.out.println("#blade配置\n" +
"blade:\n" +
" api:\n" +
" crypto:\n" +
" enabled: true\n" +
" aes-key: " + aesKey + "\n" +
" des-key: " + desKey);
System.out.println("=======================================================");
System.out.println(StringPool.EMPTY);
System.out.println("============== saber crypto.js 配置如下 ===============");
System.out.println("export default class crypto {\n" +
" static cryptoKey = '" + cryptoKey + "';\n" +
" static aesKey = '" + aesKey + "';\n" +
" static desKey = '" + desKey + "';\n" +
"}");
System.out.println("=======================================================");
}
}
@@ -0,0 +1,45 @@
package org.springblade.test;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.springblade.core.tool.utils.AesUtil;
import org.springblade.core.tool.utils.DesUtil;
import org.springblade.core.tool.utils.SM2Util;
import org.springblade.core.tool.utils.SM4Util;
/**
* 加密密钥生成器
*
* @author BladeX
*/
public class EncryptKeyGenerator {
public static void main(String[] args) {
// 生成对称加密密钥
String aesKey = AesUtil.genAesKey();
String desKey = DesUtil.genDesKey();
String sm4Key = SM4Util.generateKey();
// 生成SM2非对称加密密钥对
AsymmetricCipherKeyPair sm2KeyPair = SM2Util.generateKeyPair();
String sm2PublicKey = SM2Util.getPublicKeyString(sm2KeyPair);
String sm2PrivateKey = SM2Util.getPrivateKeyString(sm2KeyPair);
System.out.println("\n================== Encryption Keys Generated ==================\n");
System.out.println("[Symmetric Keys / 对称加密密钥]");
System.out.println();
System.out.println("AES-256-Key: " + aesKey);
System.out.println("DES-Key: " + desKey);
System.out.println("SM4-Key(国密): " + sm4Key);
System.out.println("\n----------------------------------------------------------------\n");
System.out.println("[Asymmetric Keys / 非对称加密密钥]");
System.out.println();
System.out.println("SM2-PublicKey(国密公钥): " + sm2PublicKey);
System.out.println("SM2-PrivateKey(国密私钥): " + sm2PrivateKey);
System.out.println("\n================================================================\n");
}
}
@@ -0,0 +1,22 @@
package org.springblade.test;
import org.springblade.core.tool.utils.RandomType;
import org.springblade.core.tool.utils.StringUtil;
/**
* signKey生成器
*
* @author Chill
*/
public class SignKeyGenerator {
public static void main(String[] args) {
System.out.println("=========== blade.token.sign-key 配置如下 ==============");
System.out.println("#blade配置\n" +
"blade:\n" +
" token:\n" +
" sign-key: " + StringUtil.random(32, RandomType.ALL) );
System.out.println("=======================================================");
}
}
@@ -0,0 +1,46 @@
package org.springblade.test;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.util.encoders.Hex;
import org.springblade.core.tool.utils.SM2Util;
import org.springblade.core.tool.utils.StringPool;
/**
* 国密算法生成器
*
* @author Chill
*/
public class Sm2KeyGenerator {
public static void main(String[] args) {
System.out.println("================ blade.oauth2 配置如下 =================");
AsymmetricCipherKeyPair keyPair = SM2Util.generateKeyPair();
String publicKey = SM2Util.getPublicKeyString(keyPair);
String privateKey = SM2Util.getPrivateKeyString(keyPair);
System.out.println("#blade配置 \n" +
"blade:\n" +
" oauth2:\n" +
" enabled: true\n" +
" public-key: " + publicKey + "\n" +
" private-key: " + privateKey);
System.out.println("=======================================================");
System.out.println(StringPool.EMPTY);
System.out.println("============== saber website.js 配置如下 ===============");
System.out.println("//saber配置\n" +
"oauth2: {\n" +
" publicKey: '" + publicKey + "',\n" +
"}");
System.out.println("=======================================================");
System.out.println(StringPool.EMPTY);
System.out.println("============== 密码:[admin] 加密流程如下 ================");
String password = "admin";
byte[] encryptedData = SM2Util.encrypt(password, publicKey);
String decryptedText = SM2Util.decrypt(encryptedData, privateKey);
System.out.println("加密前: " + password);
System.out.println("加密后: " + Hex.toHexString(encryptedData));
System.out.println("解密后: " + decryptedText);
System.out.println("请注意: 此密文为前端加密后调用token接口的密码参数");
System.out.println("=======================================================");
}
}
@@ -0,0 +1,120 @@
package org.springblade.test;
import lombok.SneakyThrows;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.util.encoders.Hex;
import org.springblade.core.tool.utils.SM2Util;
import org.springblade.core.tool.utils.StringUtil;
/**
* SM2Test
*
* @author Chill
*/
public class Sm2Test {
@SneakyThrows
public static void main(String[] args) {
System.out.println("================== SM2 加解密与签名测试 ==================");
// 1. 生成SM2密钥对
AsymmetricCipherKeyPair keyPair = SM2Util.generateKeyPair();
String publicKeyString = SM2Util.getPublicKeyString(keyPair);
String privateKeyString = SM2Util.getPrivateKeyString(keyPair);
System.out.println("1. 生成SM2密钥对:");
System.out.println(" 公钥 (16进制): " + publicKeyString);
System.out.println(" 公钥长度: " + publicKeyString.length());
System.out.println(" 私钥 (16进制): " + privateKeyString);
System.out.println(" 私钥长度: " + privateKeyString.length());
System.out.println("--------------------------------------------------");
// 2. 从字符串恢复密钥
System.out.println("2. 从字符串恢复密钥...");
ECPublicKeyParameters publicKey = SM2Util.stringToPublicKey(publicKeyString);
ECPrivateKeyParameters privateKey = SM2Util.stringToPrivateKey(privateKeyString);
System.out.println(" 密钥恢复成功!");
System.out.println("--------------------------------------------------");
// 3. 准备待加密的原文
String originalText = "Hello BladeX! 这是一段需要被国密SM2算法加密和签名的敏感信息。1234567890";
System.out.println("3. 待加密的原文: " + originalText);
System.out.println("--------------------------------------------------");
// 4. 执行加密
System.out.println("4. 正在执行加密操作...");
byte[] encryptedData = SM2Util.encrypt(originalText, publicKey);
if (encryptedData != null && encryptedData.length > 0) {
System.out.println(" 加密成功!");
System.out.println(" 加密后的密文 (16进制): " + Hex.toHexString(encryptedData));
System.out.println(" 密文长度: " + encryptedData.length + " 字节");
} else {
System.out.println(" 加密失败!");
return;
}
System.out.println("--------------------------------------------------");
// 5. 执行解密
System.out.println("5. 正在执行解密操作...");
String decryptedText = SM2Util.decrypt(encryptedData, privateKey);
if (StringUtil.isNotBlank(decryptedText)) {
System.out.println(" 解密成功!");
System.out.println(" 解密后的明文: " + decryptedText);
} else {
System.out.println(" 解密失败!");
return;
}
System.out.println("--------------------------------------------------");
// 6. 执行数字签名
System.out.println("6. 正在执行数字签名...");
byte[] signature = SM2Util.sign(originalText, privateKey);
if (signature != null && signature.length > 0) {
System.out.println(" 签名成功!");
System.out.println(" 数字签名 (16进制): " + Hex.toHexString(signature));
System.out.println(" 签名长度: " + signature.length + " 字节");
} else {
System.out.println(" 签名失败!");
return;
}
System.out.println("--------------------------------------------------");
// 7. 验证签名
System.out.println("7. 正在验证数字签名...");
boolean isVerified = SM2Util.verify(originalText, signature, publicKey);
System.out.println(" 签名验证结果: " + (isVerified ? "有效" : "无效"));
System.out.println("--------------------------------------------------");
// 8. 校验加解密结果
System.out.println("8. 正在校验原文与解密后的明文是否一致...");
boolean isDecryptMatch = originalText.equals(decryptedText);
System.out.println(" 加解密校验结果: " + (isDecryptMatch ? "一致" : "不一致"));
System.out.println("==================================================");
// 9. 最终结果汇总
if (isDecryptMatch && isVerified) {
System.out.println("\n[成功] SM2加解密与签名流程验证通过!");
System.out.println(" ✓ 密钥对生成成功");
System.out.println(" ✓ 加解密功能正常");
System.out.println(" ✓ 数字签名验证通过");
} else {
System.out.println("\n[失败] SM2加解密与签名流程验证失败!");
if (!isDecryptMatch) {
System.out.println(" ✗ 加解密校验失败");
}
if (!isVerified) {
System.out.println(" ✗ 数字签名验证失败");
}
}
}
}
@@ -0,0 +1,71 @@
package org.springblade.test;
import lombok.SneakyThrows;
import org.springblade.core.tool.utils.SM4Util;
import org.springblade.core.tool.utils.StringUtil;
/**
* Sm4Test
*
* @author BladeX
*/
public class Sm4Test {
@SneakyThrows
public static void main(String[] args) {
System.out.println("================== SM4 加解密测试 ==================");
// 1. 生成SM4密钥
String sm4Key = SM4Util.generateKey();
System.out.println("1. 生成SM4密钥 (16进制): " + sm4Key);
System.out.println(" 密钥长度 (Hex): " + sm4Key.length());
System.out.println("--------------------------------------------------");
// 2. 准备待加密的原文
String originalText = "Hello BladeX! 这是一段需要被国密SM4算法加密的敏感信息。1234567890";
System.out.println("2. 待加密的原文: " + originalText);
System.out.println("--------------------------------------------------");
// 3. 执行加密
System.out.println("3. 正在执行加密操作...");
String encryptedText = SM4Util.encrypt(originalText, sm4Key);
if (StringUtil.isNotBlank(encryptedText)) {
System.out.println(" 加密成功!");
System.out.println(" 加密后的密文 (16进制): " + encryptedText);
} else {
System.out.println(" 加密失败!");
return;
}
System.out.println("--------------------------------------------------");
// 4. 执行解密
System.out.println("4. 正在执行解密操作...");
String decryptedText = SM4Util.decrypt(encryptedText, sm4Key);
if (StringUtil.isNotBlank(decryptedText)) {
System.out.println(" 解密成功!");
System.out.println(" 解密后的明文: " + decryptedText);
} else {
System.out.println(" 解密失败!");
return;
}
System.out.println("--------------------------------------------------");
// 5. 校验结果
System.out.println("5. 正在校验原文与解密后的明文是否一致...");
boolean isMatch = originalText.equals(decryptedText);
System.out.println(" 校验结果: " + (isMatch ? "一致" : "不一致"));
System.out.println("==================================================");
if (isMatch) {
System.out.println("\n[成功] SM4加解密流程验证通过!");
} else {
System.out.println("\n[失败] SM4加解密流程验证失败!");
}
}
}