前端Vue使用国密sm2、sm4与后端使用工具类

本文介绍了如何在SpringBoot后端集成国密算法,包括SM2非对称加密、SM3信息摘要和SM4对称加密,并提供了相应的国密工具类。同时,阐述了在Vue前端如何使用sm-crypto库进行加密解密操作,确保敏感信息的安全。测试部分展示了加密解密的流程与性能。

一、后端(SpringBoot)

1.后端导入国密支持

<dependency>
	<groupId>org.bouncycastle</groupId>
	<artifactId>bcprov-jdk15on</artifactId>
	<version>1.68</version>
</dependency>

2.国密工具类(sm1算法不公开,这里不涉及、sm2是非对称加密、sm3是信息摘要,类似MD5加密、sm4是对称加密)

package com.doctortech.tmc.support.util;

import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.BCUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import org.bouncycastle.crypto.digests.SM3Digest;
import org.bouncycastle.crypto.engines.SM2Engine;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
import org.bouncycastle.util.encoders.Hex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.security.Security;

public class SMUtil {
   
   
    private static final Logger logger = LoggerFactory.getLogger(NotificationUtil.class);
    /**
    sm4的密钥需要16字节的字符串
    **/
    public static final String SM4_KEY = "1234567887654321";
    private static final String ALGORITHM_NAME = "SM4";
    private static final String ALGORITHM_ECB_PKCS5PADDING = "SM4/ECB/PKCS5Padding";
    /**
    sm2的公钥和私钥生成之后存起来使用即可,一般会把公钥提供给前端
    **/
    public static final String SM2_PRIVATE_KEY = "sm2私钥";
    public static final String SM2_PUBLIC_KEY = "sm2公钥";
    /**
     * sm2加密模式有两种:C1C2C3和C1C3C2(开始国密标准使用C1C2C3,新标准使用C1C3C2)
     */
    public static final SM2Engine.Mode SM2ENGINE_MODE = SM2Engine.Mode.C1C3C2;
    private static final String SM2BC_STR = "04";
    private static SM2 sm2 = new SM2();

    /**
     * SM4算法目前只支持128位(即密钥16字节)
     */
    private static final int DEFAULT_KEY_SIZE = 128;
    private static  final String DEFAULT_ENCODING="utf-8";
    static {
   
   
        if(null == Security.getProvider(BouncyCastleProvider.PROVIDER_NAME)){
   
   
            Security.addProvider(new BouncyCastleProvider());
        }
    }

    /**
     * sm3加密,文摘算法,杂凑算法
     * @param content 加密内容
     * @return
     */
    public static String sm3(String content){
   
   
        String res = "";
        try{
   
   
            byte[] srcData = content.getBytes(DEFAULT_ENCODING);
            byte[] resultHash = hash(srcData);
            res = ByteUtils.toHexString(resultHash);
        }catch (Exception e){
   
   
            e.printStackTrace(
参考资源链接:[VueSpringBoot实现国密SM2/3/4前后端联调加解密](https://wenku.csdn.net/doc/vvbtpdkd1d?utm_source=wenku_answer2doc_content) 为了确保用户数据在传输过程中保持安全,使用国密SM2算法进行加解密是一种有效的方式。首先,你需要在你的Vue项目和SpringBoot应用中引入专门处理SM2算法的第三方库SM-Crypto。可以通过npm安装该库到Vue项目中,并在SpringBoot中添加对应的依赖。 在Vue前端部分,创建一个加解密工具类,例如命名为CryptoUtil,并在其中定义doEncrypt和doDecrypt两个方法。doEncrypt方法将接收用户输入的数据,生成公钥对,并使用公钥对数据进行加密。加密完成后,将加密数据发送到后端。而doDecrypt方法则负责接收后端传来的密文,使用私钥对密文进行解密,获取原始数据。 后端SpringBoot应用也需要创建相应的加密解密工具类,定义doEncrypt和doDecrypt方法。doEncrypt方法负责接收前端发送的明文数据,使用私钥进行加密,返回密文。doDecrypt方法则将前端发送的密文使用公钥解密,返回解密后的明文数据。 在此过程中,安全地生成和传输密钥是至关重要的。通常私钥会在服务端生成并安全地存储,而公钥则可以安全地传输给前端。在Vue前端,可以使用Base64编码的字符串来表示私钥,用于后续的解密操作。 为了更好地理解这些操作,你可以查阅《VueSpringBoot实现国密SM2/3/4前后端联调加解密》这份文档。文档详细介绍了如何在前后端使用国密SM2、SM3和SM4算法进行加密和解密,以及如何通过npm安装和使用SM-Crypto库。在阅读过程中,特别关注其中关于前后端如何配合使用SM2算法进行数据加解密的章节,这将帮助你更深入地掌握技术细节,有效地解决实际开发中遇到的问题。 参考资源链接:[VueSpringBoot实现国密SM2/3/4前后端联调加解密](https://wenku.csdn.net/doc/vvbtpdkd1d?utm_source=wenku_answer2doc_content)
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值