From b32b1b522b2a711bab51ba731355610b11e94207 Mon Sep 17 00:00:00 2001 From: lSun <15893999301@qq.com> Date: Wed, 14 May 2025 17:00:42 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E4=BF=A1=E6=81=AF=E5=8A=A0?= =?UTF-8?q?=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lSun <15893999301@qq.com> --- .../bonus/auth/controller/AESCBCUtils.java | 170 ++++++++++++++++++ .../bonus/auth/service/SysLoginService.java | 3 + 2 files changed, 173 insertions(+) create mode 100644 bonus-auth/src/main/java/com/bonus/auth/controller/AESCBCUtils.java diff --git a/bonus-auth/src/main/java/com/bonus/auth/controller/AESCBCUtils.java b/bonus-auth/src/main/java/com/bonus/auth/controller/AESCBCUtils.java new file mode 100644 index 0000000..94503a7 --- /dev/null +++ b/bonus-auth/src/main/java/com/bonus/auth/controller/AESCBCUtils.java @@ -0,0 +1,170 @@ +package com.bonus.auth.controller; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.binary.Base64; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.springframework.stereotype.Component; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.security.Security; +import java.util.Arrays; + +/** + * + * AES加密工具类 + */ +@Slf4j +@Component +public class AESCBCUtils { + + public static boolean aq = true; + +// @Value("${zhly.aq.enable}") +// public void setAq(boolean aq) { +// AESCBCUtils.aq = aq; +// } + //使用AES-256-CBC加密模式,key需要为16位,key和iv可以相同! + /** + * 密钥算法 + */ + private static final String KEY_ALGORITHM = "AES"; + + /** + * 加密/解密算法 / 工作模式 / 填充方式 + * Java 6支持PKCS5Padding填充方式 + * Bouncy Castle支持PKCS7Padding填充方式 + */ + private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS7Padding"; + + /** + * 偏移量,只有CBC模式才需要 + */ + private final static String ivParameter = "1234567812345678"; + + + /** + * AES要求密钥长度为128位或192位或256位,java默认限制AES密钥长度最多128位 + */ + public static String sKey = "zhst@bonus@zhst@"; + + + + /** + * 编码格式 + */ + public static final String ENCODING = "utf-8"; + + static { + //如果是PKCS7Padding填充方式,则必须加上下面这行 + Security.addProvider(new BouncyCastleProvider()); + } + + /** + * AES加密 + *(CBC模式) + * @param source 源字符串 + * @param + * @throws Exception + * @return 加密后的密文 + */ + public static String encrypt(String source) throws Exception { + System.err.println(aq); + if(!aq){ + return source; + } + String key=sKey; + byte[] sourceBytes = source.getBytes(ENCODING); + byte[] keyBytes = key.getBytes(ENCODING); + Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM, "BC"); + IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes(ENCODING)); + cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, KEY_ALGORITHM), iv); + byte[] decrypted = cipher.doFinal(sourceBytes); + return Base64.encodeBase64String(decrypted); + } + + /** + * AES解密 + *(CBC模式) + * @param encryptStr 加密后的密文 + * @param + * @throws Exception + * @return 源字符串 + */ + public static String decrypt(String encryptStr) { + if(!aq){ + return encryptStr; + } + try{ + encryptStr = encryptStr.replace(" ","+"); + String key=sKey; + byte[] sourceBytes = Base64.decodeBase64(encryptStr); + byte[] keyBytes = key.getBytes(ENCODING); + + int base = 16; + if (keyBytes.length % base != 0) { + int groups = keyBytes.length / base + 1; + byte[] temp = new byte[groups * base]; + Arrays.fill(temp, (byte) 0); + System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length); + keyBytes = temp; + } + + Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM, "BC"); + IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes(ENCODING)); + cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, KEY_ALGORITHM), iv); + byte[] decoded = cipher.doFinal(sourceBytes); + return new String(decoded, ENCODING); + }catch (Exception e){ + log.error(e.toString(),e); + } + return ""; + } + + + public static void main(String[] args) throws Exception { + String jmData= AESCBCUtils.encrypt("Bonus@admin123"); + System.out.println("加密后字符串:" + jmData); + String data= AESCBCUtils.decrypt("DfOeNXxtTbGN35quGimHptR1uHzgATGCriuS9Z5Zh+hr/L7HcL0eoeNrCJlHfiDb"); + System.out.println("解密后的字串是:" + data); + + /*String key = "1234567812345678"; + // 加密 + long lStart = System.currentTimeMillis(); + String enString = AESCBCUtils.encrypt("2023-06-06", AESCBCUtils.sKey); + System.out.println("加密后的字串是:" + enString); + enString = AESCBCUtils.encrypt("Bonus@admin123", AESCBCUtils.sKey); + System.out.println("加密后的字串是:" + enString); + long lUseTime = System.currentTimeMillis() - lStart; + System.out.println("加密耗时:" + lUseTime + "毫秒"); + + // 解密 + lStart = System.currentTimeMillis(); + String DeString = AESCBCUtils.decrypt("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"); + System.out.println("解密后的字串是:" + DeString); + lUseTime = System.currentTimeMillis() - lStart; + System.out.println("解密耗时:" + lUseTime + "毫秒");*/ +// String key = "1234567812345678"; +// // 加密 +// long lStart = System.currentTimeMillis(); +// String enString = AESCBCUtils.encrypt("admin@123", AESCBCUtils.sKey); +// String enString2 = AESCBCUtils.encrypt("cwchen", AESCBCUtils.sKey); +// String enString3 = AESCBCUtils.encrypt("1", AESCBCUtils.sKey); +// String enString4= AESCBCUtils.encrypt("10", AESCBCUtils.sKey); +// String name=""; +// for (int i = 0; i <70 ; i++) { +// name="admin"+i; +// String pwd= AESCBCUtils.encrypt(name,AESCBCUtils.sKey); +// System.out.println("用户名:"+name+" "+"加密后密码:"+pwd); +// } + + + + + + } + + + +} diff --git a/bonus-auth/src/main/java/com/bonus/auth/service/SysLoginService.java b/bonus-auth/src/main/java/com/bonus/auth/service/SysLoginService.java index 2cc1261..833157e 100644 --- a/bonus-auth/src/main/java/com/bonus/auth/service/SysLoginService.java +++ b/bonus-auth/src/main/java/com/bonus/auth/service/SysLoginService.java @@ -1,5 +1,6 @@ package com.bonus.auth.service; +import com.bonus.auth.controller.AESCBCUtils; import com.bonus.common.core.constant.*; import com.bonus.common.core.enums.UserStatus; import com.bonus.common.core.utils.ServletUtils; @@ -46,6 +47,8 @@ public class SysLoginService * 登录 */ public LoginUser login(String username, String password) { + username= AESCBCUtils.decrypt(username); + password= AESCBCUtils.decrypt(password); // 用户名或密码为空 错误 if (StringUtils.isAnyBlank(username, password)) {