国密算法SM2、SM3、SM4 的JAVA实现(结合Hutool)

国密算法SM2、SM3、SM4 的JAVA实现(结合Hutool),第1张

国密算法SM2、SM3、SM4 的JAVA实现(结合Hutool) 一、简要
  • Hutool针对Bouncy Castle做了简化包装,用于实现国密算法中的SM2、SM3、SM4。
  • Hutool 的实现也是基于 BC(Bouncy Castle库)实现的
  • 本文只实现简单功能,若有需要请移步官网
二、POM 文件引用

    cn.hutool
    hutool-all
    5.4.0
    compile



    org.bouncycastle
    bcprov-jdk15to18
    1.69
三、SM2
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

注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5605696.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存