- Hutool针对Bouncy Castle做了简化包装,用于实现国密算法中的SM2、SM3、SM4。
- Hutool 的实现也是基于 BC(Bouncy Castle库)实现的
- 本文只实现简单功能,若有需要请移步官网
三、SM2cn.hutool hutool-all5.4.0 compile org.bouncycastle bcprov-jdk15to181.69
package com.prison.common.util; 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 org.junit.Test; import java.security.KeyPair; public class HutoolSMUtil { @Test public void sm2Test() { String text = "wangjing"; //使用随机生成的密钥对加密或解密 System.out.println("使用随机生成的密钥对加密或解密====开始"); SM2 sm2 = SmUtil.sm2(); // 公钥加密 String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey); System.out.println("公钥加密:" + encryptStr); //私钥解密 String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey)); System.out.println("私钥解密:" + decryptStr); System.out.println("使用随机生成的密钥对加密或解密====结束"); //使用自定义密钥对加密或解密 System.out.println("使用自定义密钥对加密或解密====开始"); KeyPair pair = SecureUtil.generateKeyPair("SM2"); byte[] privateKey = pair.getPrivate().getEncoded(); byte[] publicKey = pair.getPublic().getEncoded(); SM2 sm22 = SmUtil.sm2(privateKey, publicKey); // 公钥加密 String encryptStr2 = sm22.encryptBcd(text, KeyType.PublicKey); System.out.println("公钥加密:" + encryptStr2); //私钥解密 String decryptStr2 = StrUtil.utf8Str(sm22.decryptFromBcd(encryptStr2, KeyType.PrivateKey)); System.out.println("私钥解密:" + decryptStr2); System.out.println("使用自定义密钥对加密或解密====结束"); } }
执行效果
使用随机生成的密钥对加密或解密====开始 公钥加密:04357E15B4AF2E2CCA84F309A006E98D1ADB4445743E3CC4DAAD956780152E4E778A09B120691DA8B03734C72729CDED4AA93C5132562E4BD22DAFB0B5199CF84ADD4BCC85D5197BC9137AC2356B2465954A0284A5A7D864324B4FB6457D8919396C687B9C84474C0C 私钥解密:wangjing 使用随机生成的密钥对加密或解密====结束 使用自定义密钥对加密或解密====开始 公钥加密:04F9A38518E92B086C0C424F4065BDF961828D0115273394C1027D6A3D0A228529EBC7293DC95E39B6BB8E4C258269DDF579B26117C83841A4D53E0D19C573A50D65B1B4E222A5A74B8B86958A58B51241522F918D191FFE544CF4A90F1C2BD33656244E22259BF91C 私钥解密:wangjing 使用自定义密钥对加密或解密====结束四、SM3
package com.prison.common.util; import cn.hutool.crypto.SmUtil; import org.junit.Test; public class HutoolSMUtil { @Test public void sm3Test() { String text = "wangjing"; String digestHex = SmUtil.sm3("aaaaa"); System.out.println("加密后:" + digestHex); } }
执行效果
加密后:136ce3c86e4ed909b76082055a61586af20b4dab674732ebd4b599eef080c9be五、SM4
package com.prison.common.util; import cn.hutool.core.util.CharsetUtil; import cn.hutool.crypto.SmUtil; import cn.hutool.crypto.symmetric.SymmetricCrypto; import org.junit.Test; public class HutoolSMUtil { @Test public void sm4Test() { String text = "wangjing"; SymmetricCrypto sm4 = SmUtil.sm4(); String encryptHex = sm4.encryptHex(text); System.out.println("加密后:" + encryptHex); String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8); System.out.println("解密后:" + decryptStr); } }
执行效果
加密后:ad0fd3d52e1345a8ccdb2fbf005741e6 解密后:wangjing
注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)