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));
}
}

JAVA 【SM2】加密解密的更多相关文章

  1. C# 实现 JAVA AES加密解密[原创]

    以下是网上普遍能收到的JAVA AES加密解密方法. 因为里面用到了KeyGenerator 和 SecureRandom,但是.NET 里面没有这2个类.无法使用安全随机数生成KEY. 我们在接收J ...

  2. C#与Java同步加密解密DES算法

    在实际项目中,往往前端和后端使用不同的语言.比如使用C#开发客户端,使用Java开发服务器端.有时出于安全性考虑需要将字符加密传输后,由服务器解密获取.本文介绍一种采用DES算法的C#与Java同步加 ...

  3. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

  4. 【转】 java RSA加密解密实现

    [转] java RSA加密解密实现 该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar 下载地址:http://download.csdn.net/detai ...

  5. java字符串加密解密

    java字符串加密解密 字符串加密解密的方式很多,每一种加密有着相对的解密方法.下面要说的是java中模拟php的pack和unpack的字符串加密解密方法. java模拟php中pack: /** ...

  6. java aes_cbc_256 加密解密

    在之前我们在openssl上和ios上分别测试了 AES256位cbc模式的加密和解密 今天用java提供的api来测试一下:进而确定一下在PC,iOS,安卓上三个平台下的加密解密数据: 1. 首先通 ...

  7. C# Java 3DES加密解密 扩展及修正\0 问题

    注: C#已亲测及做扩展, Java 部分未做验证 /// <summary> /// 3DES加密解密 /// ------------------------------------- ...

  8. Java Base64 加密解密

    使用JDK的类 BASE64Decoder  BASE64Encoder package test; import sun.misc.BASE64Decoder; import sun.misc.BA ...

  9. C# Java DES加密解密

    转自http://www.cnblogs.com/zhuiyi/archive/2013/04/01/2993201.html 最近被DES加解密弄得超级郁闷,我用C#的方法加密得到的密文老是跟客户给 ...

  10. password学3——Java BASE64加密解密

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之中的一个,大家能够查看RFC2045-RFC2049.上面有MIME的具体规范.Base64编码可用于在HTTP环境下传递较长的标识信息 ...

随机推荐

  1. JavaScript 文件上传

    一.普通文件上传 JavaScript 可以使用表单提交来实现文件上传.首先,在 HTML 中创建一个文件输入框: <input type="file" id="f ...

  2. Unity之正确设置手机显示布局&&获取手机朝向

    目录 Unity之正确设置手机显示布局 && 获取手机朝向 前言 开篇 Unity版本及使用插件 正题 设置手机屏幕显示布局.Screen.orientation 获取手机当前朝向.I ...

  3. Dubbo2.7的Dubbo SPI实现原理细节

    总结/朱季谦 本文主要记录我对Dubbo SPI实现原理的理解,至于什么是SPI,我这里就不像其他博文一样详细地从概念再到Java SPI细细分析了,直接开门见山来分享我对Dubbo SPI的见解. ...

  4. Python标准库pathlib及实例操作

    Python标准库pathlib及实例操作 https://docs.python.org/zh-cn/3.9/library/pathlib.html 官网 讲的比较好的文章 https://zhu ...

  5. activiti03 SSM使用activity

    1.添加依赖 <!--activity依赖--> <dependency> <groupId>org.activiti</groupId> <ar ...

  6. Snipaste下载安装(使用教程)

    ## Snipaste下载安装(使用教程)**一 简单介绍** Snipaste 是一个免费简单但强大的截图工具,也可以让你将截图贴回到屏幕上!下载并打开 Snipaste,按下 F1 来开始截图,再 ...

  7. HTTPS基础原理和配置-2

    〇.概述 作为概述,以下是本文要讲的内容.HTTPS 是什么? 每个人都可能从浏览器上认出 HTTPS,并对它有好感.然后再讲一遍基础知识,再详细讲一下协议版本,密码套件(Cipher Suites) ...

  8. EL&JSTL笔记 javaweb+jdbcTempl

    # 今日内容    1. JSP:        1. 指令        2. 注释        3. 内置对象    2. MVC开发模式    3. EL表达式    4. JSTL标签   ...

  9. 超详细!Jmeter性能测试

    前言 性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,才能根据得到的测试报告进行分析,找到系统性能的瓶颈所在,而这也是优化架构设计中重要的依据. 测试流程: 需求分析→环境搭建→测试 ...

  10. esp32 开发资料

    开发工具下载 https://dl.espressif.cn/dl/esp-idf/ 设置芯片型号等 Windows 平台工具链的标准设置 - ESP32-C3 - - ESP-IDF 编程指南 la ...