一、后端(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);
public static final String SM4_KEY = "1234567887654321";
private static final String ALGORITHM_NAME = "SM4";
private static final String ALGORITHM_ECB_PKCS5PADDING = "SM4/ECB/PKCS5Padding";
public static final String SM2_PRIVATE_KEY = "sm2私钥";
public static final String SM2_PUBLIC_KEY = "sm2公钥";
public static final SM2Engine.Mode SM2ENGINE_MODE = SM2Engine.Mode.C1C3C2;
private static final String SM2BC_STR = "04";
private static SM2 sm2 = new SM2();
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());
}
}
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(