hutool工具类实现的Sm2.Sm3,Sm4加解密
  String uuid = UUID.randomUUID().toString().replace("-", "");;
        //签名/验签时,将参数名ASCII码从小到大排序
        //请求参数
        Map map = new TreeMap();
        map.put("flowNo", uuid);
        map.put("userId", "123456");
        map.put("integral","10");
        map.put("summary","周周周111");
        map.put("goodsType","1");
        map.put("toUrl","http://www.baidu.com");
//字符串拼接
        StringBuffer stringBuffer = new StringBuffer();
        map.forEach((key, value) -> {
            if(value != null) {
                stringBuffer.append(key).append("=").append(value).append("&");
            }});
        String content = stringBuffer.deleteCharAt(stringBuffer.length()-1).toString();
        System.out.println("排序拼接参数:"+content);
    
        //生成摘要
        String hash = SmUtil.sm3(content);
        System.out.println("sm3生成摘要:"+hash);
        System.out.println("=============================");
        //生成公私钥
        KeyPair pair = SecureUtil.generateKeyPair("SM2");
        String privateKey =   HexUtil.encodeHexStr(pair.getPrivate().getEncoded());
        String publicKey =  HexUtil.encodeHexStr(pair.getPublic().getEncoded());
        System.out.println("sm2公钥:"+publicKey);
        System.out.println("sm2私钥:"+privateKey);
        System.out.println("=============================");
//        byte[] privateKey = pair.getPrivate().getEncoded();
//        byte[] publicKey = pair.getPublic().getEncoded();
        //生成签名
        SM2 sm2E = SmUtil.sm2(null, publicKey);
        SM2 sm2D = SmUtil.sm2(privateKey,null);
        String encryptStr = sm2E.encryptBcd(hash, KeyType.PublicKey);
        System.out.println("sm2加密摘要生成签名:"+encryptStr);
        String decryptStr = StrUtil.utf8Str(sm2D.decryptFromBcd(encryptStr, KeyType.PrivateKey));
        System.out.println("sm2解密签名获取摘要:"+decryptStr);
        System.out.println("=============================");
        //随机生成sm4加密key
        String sm4Key = RandomUtil.randomString(RandomUtil.BASE_CHAR_NUMBER, 16);
        System.out.println("sm4Key:"+sm4Key);
        //sm4加密业务报文
        SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", sm4Key.getBytes());
        String sm4Encrypt = sm4.encryptHex(JSON.toJSONString(map));
        System.out.println("sm4加密报文:"+sm4Encrypt);
        String sm4Decrypt = sm4.decryptStr(sm4Encrypt);
        System.out.println("sm4解密报文:"+sm4Decrypt);
        System.out.println("=============================");
        //加密sm4Key
        String sm4KeyEncryptStr = sm2E.encryptBcd(sm4Key, KeyType.PublicKey);
        System.out.println("sm4Key加密:"+sm4KeyEncryptStr);
        String sm4KeyDecryptStr = StrUtil.utf8Str(sm2D.decryptFromBcd(sm4KeyEncryptStr, KeyType.PrivateKey));
        System.out.println("sm4Key解密:"+sm4KeyDecryptStr);
        System.out.println("=============================");  
hutool工具类
cn.hutool hutool-all 5.5.1 
alibaba-fastjson
com.alibaba fastjson 2.0.4.graal