SM2加密解密

package com.util;
import sviolet.smcrypto.SmCryptoUtil;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SM2Utils {
    //当前系统时间 key
    public static final String DEFAULT_SM4_SECRET_KEY = System.currentTimeMillis()+"123456";
    public static Boolean toSM2Str(String token) {
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式
        String date = df.format(new Date());
        String appMark = "SM2";
        String DEFAULT_SM4_SECRET_KEY = date+appMark+"123456";
        try {
            Map<String, Object> map = SmCryptoUtil.createSm2KeyMap();

            String pubKey2 = "045aefbb8712feef0ac9fa7dea5de4e136d43f9a7154022194ec15b898d287e558aebfdb6f61fc02733edff70d442a35339af6549249fc9e15ba459d1e4678f7f3";
            String priKey2 = "6712bf9bdb17f42165181618c4ea3f7db66c6d2ec89c2ad1c4c8f8b052439b75";

            System.out.println(DEFAULT_SM4_SECRET_KEY);
            //公钥 加密
            String encryptStr = SmCryptoUtil.sm2Encode(DEFAULT_SM4_SECRET_KEY, pubKey2);
            System.out.println("生成的秘钥:"+encryptStr);
            //私钥解密
            String decryptStr = SmCryptoUtil.sm2Decode(token, priKey2);
            System.out.println("jiemi=="+decryptStr);
            String[] temp = decryptStr.split("SM2");
            String regex = "^[0-9]*$";
                   // "^\\d{4}([0][1-9]|(1[0-2]))([1-9]|([012]\\d)|(3[01]))(([0-1]{1}[0-9]{1})|([2]{1}[0-4]{1}))(([0-5]{1}[0-9]{1}|[6]{1}[0]{1}))((([0-5]{1}[0-9]{1}|[6]{1}[0]{1})))$\n";
            Pattern imgPattern = Pattern.compile(regex);
            Matcher imgMatcher = imgPattern.matcher(temp[0]);
            //正则判断是否为数据
            if (imgMatcher.matches() && "123456".equals(temp[1])) {
                //判断解密出来的数据是否在一分钟内
//                if(decryptStr.substring(0,12).equals(date.substring(0,12))){
//                    System.out.println("解密的数据在一分钟内");
                    return true;
//                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    public static void main(String[] args) throws Exception {
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式
        String date = df.format(new Date());
        System.out.println(date.length());
        long t4=System.currentTimeMillis();
        String key =t4+"123456";

        toSM2Str("");
       // System.out.println(new Date().getTime());//1622168983585123456
    }
}

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值