一 引入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);
}
}
测试结果: