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);
}
相关推荐
VidDown15 小时前
上传 2GB 文件别让 Django 接:分片上传、对象存储直传与秒传
python·django·音视频·状态模式·实时音视频·视频编解码·视频
Lvan的前端笔记18 小时前
docker:基于docker的前端部署方案
前端·docker·状态模式
u0111026751 天前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式
星恒随风2 天前
Linux进程基础(二):进程调度、上下文切换、O(1)调度器、环境变量与虚拟地址空间
linux·笔记·学习·状态模式
江曦仁3 天前
ALV 选择框勾选不更新
状态模式
lank_M7 天前
抠图换深色背景有白边?先分清直通和预乘alpha
图像处理·人工智能·计算机视觉·状态模式
弹简特7 天前
【Java项目-企悦抽】17-抽奖模块02-抽奖接口实现
java·开发语言·状态模式·springboot
我是你的开心果7787 天前
ai全栈软件开发学习day27
人工智能·学习·状态模式
弹简特7 天前
【Java项目-企悦抽】16-抽奖模块01-获取活动完整信息接口实现
java·开发语言·状态模式·springboot
幽络源小助理10 天前
WordPress REST API 深度实战:从自定义端点到 Headless CMS 架构全拆解
架构·状态模式