接口加密 3.3 SM4工具类 import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.security.Security; public class SM4Util { static { Security.addProvider(new BouncyCastleProvider()); } // 生成SM4密钥 public static byte[] generateKey() { try{ KeyGenerator keyGenerator KeyGenerator.getInstance("SM4", "BC"); keyGenerator.init(128); // 可选 128 或 256 SecretKey secretKey keyGenerator.generateKey(); return secretKey.getEncoded(); } catch (Exception e) { //TODO 处理异常 } } // 加密 public static byte[] encrypt(byte[] keyBytes, byte[] data) { try{ SecretKeySpec keySpec new SecretKeySpec(keyBytes, "SM4"); Cipher cipher Cipher.getInstance("SM4/ECB/PKCS5Padding", "BC"); cipher.init(Cipher.ENCRYPTMODE, keySpec); return cipher.doFinal(data); } catch (Exception e) { //TODO 处理异常 } } // 解密 public static byte[] decrypt(byte[] keyBytes, byte[] encryptedData) { try{ SecretKeySpec keySpec new SecretKeySpec(keyBytes, "SM4"); Cipher cipher Cipher.getInstance("SM4/ECB/PKCS5Padding", "BC"); cipher.init(Cipher.DECRYPTMODE, keySpec); return cipher.doFinal(encryptedData); } catch (Exception e) { //TODO 处理异常 } } } 3.4 Hmacsm3工具类 import org.apache.commons.codec.binary.Base64; import org.bouncycastle.crypto.digests.SM3Digest; import org.bouncycastle.crypto.macs.HMac; import org.bouncycastle.crypto.params.KeyParameter; import java.security.SecureRandom; public class HmacSM3Util { / 计算 HMACSM3 @param key 密钥 @param data 数据 @return HMACSM3 值 / public static byte[] hmacSM3(byte[] key, byte[] data) { HMac hmac new HMac(new SM3Digest()); hmac.init(new KeyParameter(key)); hmac.update(data, 0, data.length); byte[] result new byte[hmac.getMacSize()]; hmac.doFinal(result, 0); return result; } / 生成指定长度的随机密钥 @param length 密钥长度(字节) @return 随机生成的密钥 / public static byte[] generateRandomKey(int length) { SecureRandom random new SecureRandom(); byte[] key new byte[length]; random.nextBytes(key); return key; } // 示例用法 public static void main(String[] args) { // 生成随机密钥 byte[] key generateRandomKey(16); // 16字节长度的随机密钥 // 待计算的数据 byte[] data "Hello, HMACSM3!".getBytes(); // 计算 HMACSM3 值 byte[] hmacValue hmacSM3(key, data); // 打印结果 System.out.println("HMACSM3 值: " + Base64.encodeBase64String(hmacValue)); } }