From 012235d05d8dc7c2decdc7229d93033b0399ecbb Mon Sep 17 00:00:00 2001
From: xiejun <xiejun@vci-tech.com>
Date: 星期日, 10 十一月 2024 15:49:53 +0800
Subject: [PATCH] 集成获取mdm分发通用数据格式接口集成
---
Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/AesUtil.java | 309 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 309 insertions(+), 0 deletions(-)
diff --git a/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/AesUtil.java b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/AesUtil.java
new file mode 100644
index 0000000..69152ff
--- /dev/null
+++ b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/AesUtil.java
@@ -0,0 +1,309 @@
+/*
+ * Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+package org.springblade.core.tool.utils;
+
+import org.springframework.lang.Nullable;
+import org.springframework.util.Assert;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * 瀹屽叏鍏煎寰俊鎵�浣跨敤鐨凙ES鍔犲瘑宸ュ叿绫�
+ * aes鐨刱ey蹇呴』鏄�256byte闀匡紙姣斿32涓瓧绗︼級锛屽彲浠ヤ娇鐢ˋesKit.genAesKey()鏉ョ敓鎴愪竴缁刱ey
+ *
+ * @author L.cm
+ */
+public class AesUtil {
+
+ public static final Charset DEFAULT_CHARSET = Charsets.UTF_8;
+
+ /**
+ * 鑾峰彇瀵嗛挜
+ *
+ * @return {String}
+ */
+ public static String genAesKey() {
+ return StringUtil.random(32);
+ }
+
+ /**
+ * 鍔犲瘑
+ *
+ * @param content 鏂囨湰鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return byte[]
+ */
+ public static byte[] encrypt(String content, String aesTextKey) {
+ return encrypt(content.getBytes(DEFAULT_CHARSET), aesTextKey);
+ }
+
+ /**
+ * 鍔犲瘑
+ *
+ * @param content 鏂囨湰鍐呭
+ * @param charset 缂栫爜
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return byte[]
+ */
+ public static byte[] encrypt(String content, Charset charset, String aesTextKey) {
+ return encrypt(content.getBytes(charset), aesTextKey);
+ }
+
+ /**
+ * 鍔犲瘑
+ *
+ * @param content 鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return byte[]
+ */
+ public static byte[] encrypt(byte[] content, String aesTextKey) {
+ return encrypt(content, Objects.requireNonNull(aesTextKey).getBytes(DEFAULT_CHARSET));
+ }
+
+ /**
+ * hex鍔犲瘑
+ *
+ * @param content 鏂囨湰鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return {String}
+ */
+ public static String encryptToHex(String content, String aesTextKey) {
+ return HexUtil.encodeToString(encrypt(content, aesTextKey));
+ }
+
+ /**
+ * hex鍔犲瘑
+ *
+ * @param content 鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return {String}
+ */
+ public static String encryptToHex(byte[] content, String aesTextKey) {
+ return HexUtil.encodeToString(encrypt(content, aesTextKey));
+ }
+
+ /**
+ * Base64鍔犲瘑
+ *
+ * @param content 鏂囨湰鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return {String}
+ */
+ public static String encryptToBase64(String content, String aesTextKey) {
+ return Base64Util.encodeToString(encrypt(content, aesTextKey));
+ }
+
+ /**
+ * Base64鍔犲瘑
+ *
+ * @param content 鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return {String}
+ */
+ public static String encryptToBase64(byte[] content, String aesTextKey) {
+ return Base64Util.encodeToString(encrypt(content, aesTextKey));
+ }
+
+ /**
+ * hex瑙e瘑
+ *
+ * @param content 鏂囨湰鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return {String}
+ */
+ @Nullable
+ public static String decryptFormHexToString(@Nullable String content, String aesTextKey) {
+ byte[] hexBytes = decryptFormHex(content, aesTextKey);
+ if (hexBytes == null) {
+ return null;
+ }
+ return new String(hexBytes, DEFAULT_CHARSET);
+ }
+
+ /**
+ * hex瑙e瘑
+ *
+ * @param content 鏂囨湰鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return byte[]
+ */
+ @Nullable
+ public static byte[] decryptFormHex(@Nullable String content, String aesTextKey) {
+ if (StringUtil.isBlank(content)) {
+ return null;
+ }
+ return decryptFormHex(content.getBytes(DEFAULT_CHARSET), aesTextKey);
+ }
+
+ /**
+ * hex瑙e瘑
+ *
+ * @param content 鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return byte[]
+ */
+ public static byte[] decryptFormHex(byte[] content, String aesTextKey) {
+ return decrypt(HexUtil.decode(content), aesTextKey);
+ }
+
+ /**
+ * Base64瑙e瘑
+ *
+ * @param content 鏂囨湰鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return {String}
+ */
+ @Nullable
+ public static String decryptFormBase64ToString(@Nullable String content, String aesTextKey) {
+ byte[] hexBytes = decryptFormBase64(content, aesTextKey);
+ if (hexBytes == null) {
+ return null;
+ }
+ return new String(hexBytes, DEFAULT_CHARSET);
+ }
+
+ /**
+ * Base64瑙e瘑
+ *
+ * @param content 鏂囨湰鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return byte[]
+ */
+ @Nullable
+ public static byte[] decryptFormBase64(@Nullable String content, String aesTextKey) {
+ if (StringUtil.isBlank(content)) {
+ return null;
+ }
+ return decryptFormBase64(content.getBytes(DEFAULT_CHARSET), aesTextKey);
+ }
+
+ /**
+ * Base64瑙e瘑
+ *
+ * @param content 鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return byte[]
+ */
+ public static byte[] decryptFormBase64(byte[] content, String aesTextKey) {
+ return decrypt(Base64Util.decode(content), aesTextKey);
+ }
+
+ /**
+ * 瑙e瘑
+ *
+ * @param content 鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return {String}
+ */
+ public static String decryptToString(byte[] content, String aesTextKey) {
+ return new String(decrypt(content, aesTextKey), DEFAULT_CHARSET);
+ }
+
+ /**
+ * 瑙e瘑
+ *
+ * @param content 鍐呭
+ * @param aesTextKey 鏂囨湰瀵嗛挜
+ * @return byte[]
+ */
+ public static byte[] decrypt(byte[] content, String aesTextKey) {
+ return decrypt(content, Objects.requireNonNull(aesTextKey).getBytes(DEFAULT_CHARSET));
+ }
+
+ /**
+ * 瑙e瘑
+ *
+ * @param content 鍐呭
+ * @param aesKey 瀵嗛挜
+ * @return byte[]
+ */
+ public static byte[] encrypt(byte[] content, byte[] aesKey) {
+ return aes(Pkcs7Encoder.encode(content), aesKey, Cipher.ENCRYPT_MODE);
+ }
+
+ /**
+ * 鍔犲瘑
+ *
+ * @param encrypted 鍐呭
+ * @param aesKey 瀵嗛挜
+ * @return byte[]
+ */
+ public static byte[] decrypt(byte[] encrypted, byte[] aesKey) {
+ return Pkcs7Encoder.decode(aes(encrypted, aesKey, Cipher.DECRYPT_MODE));
+ }
+
+ /**
+ * ase鍔犲瘑
+ *
+ * @param encrypted 鍐呭
+ * @param aesKey 瀵嗛挜
+ * @param mode 妯″紡
+ * @return byte[]
+ */
+ private static byte[] aes(byte[] encrypted, byte[] aesKey, int mode) {
+ Assert.isTrue(aesKey.length == 32, "IllegalAesKey, aesKey's length must be 32");
+ try {
+ Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
+ SecretKeySpec keySpec = new SecretKeySpec(aesKey, "AES");
+ IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(aesKey, 0, 16));
+ cipher.init(mode, keySpec, iv);
+ return cipher.doFinal(encrypted);
+ } catch (Exception e) {
+ throw Exceptions.unchecked(e);
+ }
+ }
+
+ /**
+ * 鎻愪緵鍩轰簬PKCS7绠楁硶鐨勫姞瑙e瘑鎺ュ彛.
+ */
+ private static class Pkcs7Encoder {
+ private static final int BLOCK_SIZE = 32;
+
+ private static byte[] encode(byte[] src) {
+ int count = src.length;
+ // 璁$畻闇�瑕佸~鍏呯殑浣嶆暟
+ int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE);
+ // 鑾峰緱琛ヤ綅鎵�鐢ㄧ殑瀛楃
+ byte pad = (byte) (amountToPad & 0xFF);
+ byte[] pads = new byte[amountToPad];
+ for (int index = 0; index < amountToPad; index++) {
+ pads[index] = pad;
+ }
+ int length = count + amountToPad;
+ byte[] dest = new byte[length];
+ System.arraycopy(src, 0, dest, 0, count);
+ System.arraycopy(pads, 0, dest, count, amountToPad);
+ return dest;
+ }
+
+ private static byte[] decode(byte[] decrypted) {
+ int pad = decrypted[decrypted.length - 1];
+ if (pad < 1 || pad > BLOCK_SIZE) {
+ pad = 0;
+ }
+ if (pad > 0) {
+ return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad);
+ }
+ return decrypted;
+ }
+ }
+}
--
Gitblit v1.9.3