SM2 (非对称加密)

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);
}
相关推荐
sugar__salt5 天前
从零理解 LLM 流式输出:Vue3 + DeepSeek API 实战
前端·人工智能·状态模式·sse·流式输出
ttwuai5 天前
Go 后台接口 401/403 排查:JWT 过期、刷新请求和权限码怎么定位
开发语言·golang·状态模式
ji_shuke6 天前
Vue3 前端批量打印 PDF/图片踩坑记:跨域、合并打印、对话框闪退与按钮一直 loading
前端·pdf·状态模式·pdf打印
ttwuai7 天前
Go 后台富文本图片上传失败排查:前端限制、接口和存储目录要一起看
前端·golang·状态模式
从此以后自律7 天前
三大传参注解完整详解
状态模式
ttod_qzstudio8 天前
【软考设计模式】状态模式:状态驱动行为自动转换与代码填空精讲
设计模式·状态模式
折哥的程序人生 · 物流技术专研8 天前
Java 23 种设计模式:从踩坑到精通 | 番外:状态 vs 策略 —— if-else 消除的两条路,你走对了吗?
java·spring·状态模式·策略模式·java面试·java设计模式·从踩坑到精通
xiaotie10058 天前
给deerflow2.0增加模型Token 使用数量显示的功能
状态模式
前端H11 天前
微前端 v3 架构升级:从加载隔离到状态协同
前端·架构·状态模式
脑子运行超载14 天前
Java动态生成PDF文件
java·pdf·状态模式·文件上传下载