• 国密算法工具-SmUtil
    • 介绍
    • 使用
      • 引入Bouncy Castle依赖
      • 非对称加密SM2
      • 摘要加密算法SM3
      • 对称加密SM4

    国密算法工具-SmUtil

    介绍

    Hutool针对Bouncy Castle做了简化包装,用于实现国密算法中的SM2、SM3、SM4。

    国密算法工具封装包括:

    • 非对称加密和签名:SM2
    • 摘要签名算法:SM3
    • 对称加密:SM4国密算法需要引入Bouncy Castle库的依赖。

    使用

    引入Bouncy Castle依赖

    1. <dependency>
    2. <groupId>org.bouncycastle</groupId>
    3. <artifactId>bcprov-jdk15on</artifactId>
    4. <version>${bouncycastle.version}</version>
    5. </dependency>

    说明bcprov-jdk15on的版本请前往Maven中央库搜索,查找对应JDK的版本。

    非对称加密SM2

    • 使用随机生成的密钥对加密或解密
    1. String text = "我是一段测试aaaa";
    2. SM2 sm2 = SmUtil.sm2();
    3. // 公钥加密,私钥解密
    4. String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
    5. String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));
    • 使用自定义密钥对加密或解密
    1. String text = "我是一段测试aaaa";
    2. KeyPair pair = SecureUtil.generateKeyPair("SM2");
    3. byte[] privateKey = pair.getPrivate().getEncoded();
    4. byte[] publicKey = pair.getPublic().getEncoded();
    5. SM2 sm2 = SmUtil.sm2(privateKey, publicKey);
    6. // 公钥加密,私钥解密
    7. String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
    8. String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));

    摘要加密算法SM3

    1. //结果为:136ce3c86e4ed909b76082055a61586af20b4dab674732ebd4b599eef080c9be
    2. String digestHex = SmUtil.sm3("aaaaa");

    对称加密SM4

    1. String content = "test中文";
    2. SymmetricCrypto sm4 = SmUtil.sm4();
    3. String encryptHex = sm4.encryptHex(content);
    4. String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);