一 引入pom
<dependency><groupId>com.antherd</groupId><artifactId>sm-crypto</artifactId><version>0.3.2</version></dependency>
二 代码实现
package com.example.ytyproject.component;import com.antherd.smcrypto.sm4.Sm4;
import com.antherd.smcrypto.sm4.Sm4Options;/*** 国密算法代码实现*/public class SmAutherdComponent {public static void main(String[] args) {encrypt();System.out.println("-------------------------");decrypt();}public static void encrypt() {String msg = "大家好,我是国密加密算法";String key = "werf45edu9abcde345dcba9t7654ws34"; // 16 进制字符串,要求为 128 比特String encryptData1 = Sm4.encrypt(msg, key); // 加密,默认使用 pkcs#5 填充,输出16进制字符串Sm4Options sm4Options2 = new Sm4Options();sm4Options2.setPadding("none");String encryptData2 = Sm4.encrypt(msg, key, sm4Options2); // 加密,不使用 padding,输出16进制字符串Sm4Options sm4Options3 = new Sm4Options();sm4Options3.setPadding("none");byte[] encryptData3 = Sm4.hexToBytes(Sm4.encrypt(msg, key, sm4Options3)); // 加密,不使用 padding,输出转为字节数组Sm4Options sm4Options4 = new Sm4Options();sm4Options4.setMode("cbc");sm4Options4.setIv("fedcba98765432100123456789abcdef");String encryptData4 = Sm4.encrypt(msg, key, sm4Options4); // 加密,cbc 模式,输出16进制字符串System.out.println("国密算法加密1:" + encryptData1);System.out.println("国密算法加密2:" + encryptData2);System.out.println("国密算法加密3:" + encryptData3);System.out.println("国密算法加密4:" + encryptData4);}public static void decrypt() {String encryptData = "0134da87fb6bd695161026b532a3afea3122e647bd94ddf06016867e7363bc5082adc8b33f8b91f88f4c7099b851d96f"; // 加密后的 16 进制字符串String key = "werf45edu9abcde345dcba9t7654ws34"; // 16 进制字符串,要求为 128 比特String decryptData5 = Sm4.decrypt(encryptData, key); // 解密,默认使用 pkcs#5 填充,输出 utf8 字符串Sm4Options sm4Options6 = new Sm4Options();sm4Options6.setPadding("none");String decryptData6 = Sm4.decrypt(encryptData, key, sm4Options6); // 解密,不使用 padding,输出 utf8 字符串Sm4Options sm4Options7 = new Sm4Options();sm4Options7.setPadding("none");byte[] decryptData7 = Sm4.utf8ToArray(Sm4.decrypt(encryptData, key, sm4Options7)); // 解密,不使用 padding,输出转为字节数组Sm4Options sm4Options8 = new Sm4Options();sm4Options8.setMode("cbc");sm4Options8.setIv("fedcba98765432100123456789abcdef");String decryptData8 = Sm4.decrypt(encryptData, key, sm4Options8); // 解密,cbc 模式,输出 utf8 字符串System.out.println("国密算法解密1:" + decryptData5);System.out.println("国密算法解密2:" + decryptData6);System.out.println("国密算法解密3:" + decryptData7);System.out.println("国密算法解密4:" + decryptData8);}
}
测试结果: