SM2用于安全的密钥交换和数字签名。它需要一对密钥(公钥和私钥)。在实际业务中,后端负责生成密钥对,公钥交给前端加密数据,私钥留在后端解密
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
public void testSM2() {
// 1. 生成密钥对
SM2 sm2 = SmUtil.sm2();
String privateKey = sm2.getPrivateKeyBase64(); // Base64格式私钥
String publicKey = sm2.getPublicKeyBase64(); // Base64格式公钥
System.out.println("Public Key: " + publicKey);
System.out.println("Private Key: " + privateKey);
// 假设这是前端用公钥加密后发过来的密文
String data = "待签名的订单号: 20230520001";
// 2. 私钥签名
String sign = sm2.signHex(HexUtil.encodeHexStr(data));
System.out.println("签名: " + sign);
// 3. 公钥验签
boolean verify = sm2.verifyHex(HexUtil.encodeHexStr(data), sign);
System.out.println("验签结果: " + verify);
// ---------- 针对请求参数的加解密示例 ----------
// 模拟前端传参: 明文参数
String plainParam = "userId=123&money=100";
// 后端(接收方)使用私钥解密
// 注意: 实际使用时,需要将前端发来的密文传入
// String decrypted = sm2.decryptStr(encryptedFromFrontend, KeyType.PrivateKey);
}