From 8f4949af80da3b44416b0190813e90d63fa71642 Mon Sep 17 00:00:00 2001 From: hongawen <83944980@qq.com> Date: Mon, 16 Dec 2024 10:12:59 +0800 Subject: [PATCH] =?UTF-8?q?sm4=E8=A7=A3=E5=AF=86=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/njcn/common/utils/sm/Sm4Utils.java | 100 +++++++----------- 1 file changed, 39 insertions(+), 61 deletions(-) diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4Utils.java b/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4Utils.java index b7c820b97..1bba92458 100644 --- a/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4Utils.java +++ b/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4Utils.java @@ -10,8 +10,7 @@ import java.util.regex.Pattern; /** * @author yexibao */ -public class Sm4Utils -{ +public class Sm4Utils { //全局秘钥 public final static String globalSecretKey = "11HDESaAhiHHug2z"; @@ -37,26 +36,20 @@ public class Sm4Utils this.iv = iv; } - public Sm4Utils(String secretKey) - { + public Sm4Utils(String secretKey) { this.secretKey = secretKey; } - public String encryptData_ECB(String plainText) - { - try - { + public String encryptData_ECB(String plainText) { + try { Sm4Context ctx = new Sm4Context(); ctx.isPadding = true; ctx.mode = Sm4.SM4_ENCRYPT; byte[] keyBytes; - if (HEX_STRING) - { + if (HEX_STRING) { keyBytes = util.hexStringToBytes(secretKey); - } - else - { + } else { keyBytes = secretKey.getBytes(); } @@ -64,66 +57,59 @@ public class Sm4Utils sm4.sm4_setkey_enc(ctx, keyBytes); byte[] encrypted = sm4.sm4_crypt_ecb(ctx, plainText.getBytes("GBK")); String cipherText = new BASE64Encoder().encode(encrypted); - if (cipherText != null && cipherText.trim().length() > 0) - { + if (cipherText != null && cipherText.trim().length() > 0) { Pattern p = Pattern.compile("\\s*|\t|\r|\n"); Matcher m = p.matcher(cipherText); cipherText = m.replaceAll(""); } return cipherText; - } - catch (Exception e) - { + } catch (Exception e) { return null; } } - public String decryptData_ECB(String cipherText) - { - try - { + public String decryptData_ECB(String cipherText) { + try { Sm4Context ctx = new Sm4Context(); ctx.isPadding = true; ctx.mode = Sm4.SM4_DECRYPT; byte[] keyBytes; - if (HEX_STRING) - { + if (HEX_STRING) { keyBytes = util.hexStringToBytes(secretKey); - } - else - { + } else { keyBytes = secretKey.getBytes(); } Sm4 sm4 = new Sm4(); sm4.sm4_setkey_dec(ctx, keyBytes); byte[] decrypted = sm4.sm4_crypt_ecb(ctx, new BASE64Decoder().decodeBuffer(cipherText)); - return new String(decrypted, "GBK"); - } - catch (Exception e) - { + String tempText = new String(decrypted, "GBK"); + String finalText = ""; + for (int i = 0; i < tempText.length(); i++) { + char c = tempText.charAt(i); + if ((int) c != 0) { + finalText += c; + } + } + return finalText; + } catch (Exception e) { return null; } } - public String encryptData_CBC(String plainText) - { - try - { + public String encryptData_CBC(String plainText) { + try { Sm4Context ctx = new Sm4Context(); ctx.isPadding = true; ctx.mode = Sm4.SM4_ENCRYPT; byte[] keyBytes; byte[] ivBytes; - if (HEX_STRING) - { + if (HEX_STRING) { keyBytes = util.hexStringToBytes(secretKey); ivBytes = util.hexStringToBytes(iv); - } - else - { + } else { keyBytes = secretKey.getBytes(); ivBytes = iv.getBytes(); } @@ -132,37 +118,29 @@ public class Sm4Utils sm4.sm4_setkey_enc(ctx, keyBytes); byte[] encrypted = sm4.sm4_crypt_cbc(ctx, ivBytes, plainText.getBytes("GBK")); String cipherText = new BASE64Encoder().encode(encrypted); - if (cipherText != null && cipherText.trim().length() > 0) - { + if (cipherText != null && cipherText.trim().length() > 0) { Pattern p = Pattern.compile("\\s*|\t|\r|\n"); Matcher m = p.matcher(cipherText); cipherText = m.replaceAll(""); } return cipherText; - } - catch (Exception e) - { + } catch (Exception e) { return null; } } - public String decryptData_CBC(String cipherText) - { - try - { + public String decryptData_CBC(String cipherText) { + try { Sm4Context ctx = new Sm4Context(); ctx.isPadding = true; ctx.mode = Sm4.SM4_DECRYPT; byte[] keyBytes; byte[] ivBytes; - if (HEX_STRING) - { + if (HEX_STRING) { keyBytes = util.hexStringToBytes(secretKey); ivBytes = util.hexStringToBytes(iv); - } - else - { + } else { keyBytes = secretKey.getBytes(); ivBytes = iv.getBytes(); } @@ -171,23 +149,23 @@ public class Sm4Utils sm4.sm4_setkey_dec(ctx, keyBytes); byte[] decrypted = sm4.sm4_crypt_cbc(ctx, ivBytes, new BASE64Decoder().decodeBuffer(cipherText)); return new String(decrypted, "GBK"); - } - catch (Exception e) - { + } catch (Exception e) { return null; } } - public static void main(String[] args) throws IOException - { - String plainText ="@#001njcnpqs"; + public static void main(String[] args) throws IOException { + String plainText = "@#001njcnpqs"; //11HDESaAhiHHugDz String secretKey = "11HDESaAhiHHug2z"; Sm4Utils sm4 = new Sm4Utils(secretKey); String cipherText = sm4.encryptData_ECB(plainText); + System.out.println("加密后:" + cipherText); String cipherText1 = sm4.decryptData_ECB(cipherText); - cipherText = cipherText + "11HDESaAhiHHug2z"; + System.out.println("解密后:" + cipherText1); + + cipherText = cipherText + "11HDESaAhiHHug2z"; sm4.setSecretKey("11HDESaAhiHHug2z"); cipherText = sm4.encryptData_ECB(cipherText); plainText = sm4.decryptData_ECB(cipherText);