hutool工具类实现的Sm2.Sm3,Sm4加解密
String uuid = UUID.randomUUID().toString().replace("-", "");; //签名/验签时,将参数名ASCII码从小到大排序 //请求参数 Mapmap = 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