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);
}
相关推荐
NiceCloud喜云3 小时前
Claude API 流式输出(SSE)实战:从打字机效果到工具调用全流程
java·前端·ide·人工智能·chrome·intellij-idea·状态模式
REDcker14 小时前
有限状态机与状态模式详解 FSM建模Java状态模式与C++表驱动模板实践
java·c++·状态模式
青春喂了后端17 小时前
IntelliGit 前端状态层重构:把一个全局 Store 拆成清晰的状态边界
前端·重构·状态模式
不是山谷.:.21 小时前
前端性能优化全解析:从原理到落地,覆盖全领域与多技术栈
前端·笔记·性能优化·状态模式
星秀日1 天前
Spring Boot + Sa-Token 实时聊天系统:用户注册流程源码深度剖析
java·人工智能·spring·状态模式
Maimai108081 天前
前端如何落地 SSE:从实时评论到可复用的实时数据 Hook
前端·javascript·react.js·前端框架·web3·状态模式·webassembly
前端不太难1 天前
从点击到意图:鸿蒙 App 的 AI 进化
人工智能·状态模式·harmonyos
多加点辣也没关系1 天前
设计模式-状态模式
设计模式·状态模式
未若君雅裁1 天前
SpringMVC 执行流程详解
java·spring boot·spring·状态模式