JAVA 【SM2】加密解密
JAVA 【SM2】加密解密
前言:最近项目中必须用到SM2的加密解密
引入的Maven依赖
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> </dependency> <!-- SM2加密 --> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.64</version> </dependency>
一个工具类搞定!
package com.dtccd.md.biz.opof.util; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SmUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.SM2; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.springframework.util.StringUtils; import java.io.UnsupportedEncodingException; import java.security.KeyPair; /** * @ClassName: SM2Util * @Author: yxp * @Data: 2023/2/23 0023 18:14 */ @Slf4j public class SM2Util { private static SM2 sm2; /**私钥*/ final private static String privateKey = "xxxxxxxxxx";//自己调用下面的getSM2Key生成 /**公钥*/ final private static String publicKey = "xxxxxxxxx";//自己调用下面的getSM2Key生成 private static synchronized SM2 getSm2() { if (sm2 == null) { // Environment environment = SpringBeanUtil.getApplicationContext().getEnvironment(); // String privateKey = environment.getProperty("encrypt.sm2.privateKey"); // String publicKey = environment.getProperty("encrypt.sm2.publicKey"); sm2 = SmUtil.sm2(Base64.decodeBase64(privateKey), Base64.decodeBase64(publicKey)); } return sm2; } /** * 公钥加密 * * @param cipherTxt * @return */ public static String encrypt(String cipherTxt) { if (!StringUtils.hasText(cipherTxt)) { return cipherTxt; } String encryptStr = getSm2().encryptBcd(cipherTxt, KeyType.PublicKey); return encryptStr; } /** * 私钥解密 * * @param plainTxt * @return */ public static String decrypt(String plainTxt) { if (!StringUtils.hasText(plainTxt)) { return plainTxt; } String decryptStr = StrUtil.utf8Str(getSm2().decryptFromBcd(plainTxt, KeyType.PrivateKey)); return decryptStr; } /** * 生成一对 C1C2C3 格式的SM2密钥 * * @return 处理结果 */ public static void getSM2Key() { KeyPair pair = SecureUtil.generateKeyPair("SM2"); byte[] privateKey = pair.getPrivate().getEncoded(); byte[] publicKey = pair.getPublic().getEncoded(); try { System.out.println("私钥" + new String(Base64.encodeBase64(privateKey), CharsetUtil.UTF_8)); System.out.println("公钥" + new String(Base64.encodeBase64(publicKey), CharsetUtil.UTF_8)); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); } } public static void main(String[] args) { String name = "张三"; String mi = encrypt(name); System.out.println(mi); System.out.println(decrypt(mi)); } }
zzzzzzzzzzzz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)