首页 > 编程语言 >JAVA 【SM2】加密解密

JAVA 【SM2】加密解密

时间:2023-02-24 09:46:21浏览次数:44  
标签:hutool return String SM2 解密 static import JAVA

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

 

标签:hutool,return,String,SM2,解密,static,import,JAVA
From: https://www.cnblogs.com/ymlyxp/p/17150221.html

相关文章

  • Java培训班有用吗?这个问题大家要怎么看待
    在众多的编程培训中,Java软件开发作为老牌儿的编程主流,从发展前景上看,无论是现在还是将来,依然会持续火爆的状态。对于当下年轻人想要快速的掌握这项技术,进入到这个行业,最为......
  • Java培训机构排名够不够真实
    Java软件开发在互联网行业中的发展是非常不错的,不管是现在还是未来明显有这不可限量的前途,但是,对于一些相关的Java学习机构来说,目前并没有一个比较权威性的排名,所以说,哪些......
  • 广州Java培训班多少钱,这还是给看自己
    广州的Java培训班还是有不少的,线上机构有一部分,线下也有一部分,要说学习的费用肯定是有高有低的,毕竟成本上有很大的差距,但总体上来说,线上的费用确实是比线下便宜很多的,一般......
  • Java开发培训机构哪家好?大家了解的够清楚了吗
    目前市面上的Java开发培训是有很多的,教学也是层次不齐的,如果选择错了,那么后果就是既浪费金钱,有浪费了时间与精力,掌握技术方面又不是很行,就业必然会非常困难,所以,我们在选择......
  • 高端Java培训课程的学习有什么区别
    Java软件开发想必大家都是了解的,作为互联网炙手可热的行业,这类的相关人才各方面都得到了不少的优待,所以,想要进入这个行业发展的年轻人非常多,相对的大家都更喜欢报名Java培......
  • Java开发技能培训机构哪家好,有哪些具体标准
    Java开发技能培训机构哪家好?小编认为,只要是正规的机构、课程体系与就业服务都比较前沿的完善的,就都是不错的。至于城市的选择,是更建议大家在一二线城市学习的,毕竟互联网发......
  • Java线上培训班咋样,是可以选择学习的吧
    学习Java这样专业的编程技术,还是给考虑参加培训才行,但很多同学本身是在校大学生以及在职人员,受到时间和地域的限制,无法做到脱产的面授学习,于是大家都将希望看向了Java线上......
  • 解密Prompt系列2. 冻结Prompt微调LM: T5 & PET & LM-BFF
    这一章我们介绍固定prompt微调LM的相关模型,他们的特点都是针对不同的下游任务设计不同的prompt模板,在微调过程中固定模板对预训练模型进行微调。以下按时间顺序介绍,支持任......
  • 读Java实战(第二版)笔记19_尾声
    1. Scala1.1. 混合了面向对象和函数式编程的语言1.2. 直接使用任何一个Java类库1.3. 声明非递归的方法时,不需要显式地返回类型1.3.1. 会自动地替你推断生成一个......
  • 【报错:For input string: ""报错: get connection error! 报错:java.lang.NullPointerEx
     原因:没有input数据进入,但是当我填写数据进入的时候    getconnectionerror!这个消息,是我要抛出去的异常,源代码下  我一开始觉得是代码书写的问题,找........