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);
}
相关推荐
weixin_445476683 天前
LIMS 3.0 测试环境部署过程记录
linux·状态模式
xiaoxiangsiyan3 天前
运维之前端反调试学习
运维·前端·学习·状态模式
热爱编程的小李4 天前
UniApp 实现 H5/Android/uniapp原生 三端 MinIO 预签名 PUT 直传方案
状态模式
Crazy________5 天前
k8s部署若依微服务架构流程,v3.6.6
运维·云原生·容器·kubernetes·状态模式
fīɡЙtīиɡ ℡6 天前
怎么是用JWT
java·状态模式
立心者07 天前
D Gaussian splatting : 部署模型网页展示
状态模式
一水10 天前
TTFT优化:一个方案的5次推倒重来
java·ai·状态模式
yz_aiks11 天前
Requestly规则使用技巧:前端联调、接口Mock与网络请求调试实战
前端·网络·状态模式·requestly
星恒随风11 天前
C++ STL 详解:map 与 multimap 的使用、operator[]
开发语言·c++·笔记·学习·状态模式
Dontla12 天前
q搜索 / q过滤解释(q参数、query参数、q=)
状态模式