Bläddra i källkod

app端guid和用户名密码加密采用AES加密,并实现解密

bmmx 1 år sedan
förälder
incheckning
0266eb117d

+ 2 - 0
src/main/java/com/om/entity/dto/GuidDTO.java

@@ -1,11 +1,13 @@
 package com.om.entity.dto;
 
 import io.swagger.models.auth.In;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 @Data
 @NoArgsConstructor
+@AllArgsConstructor
 public class GuidDTO {
     private Integer userId;
     private String deviceSn;

+ 2 - 2
src/main/java/com/om/entity/vo/VciInfoVO.java

@@ -17,9 +17,9 @@ public class VciInfoVO {
     private String bluetoothAddress;
 
     @ApiModelProperty(value = "是否是默认设备")
-    private Integer isDefault;
+    private String isDefault;
 
     @ApiModelProperty(value = "状态")
-    private Integer state;
+    private String state;
 
 }

+ 2 - 1
src/main/java/com/om/service/impl/BrandServiceImpl.java

@@ -18,6 +18,7 @@ import com.om.service.IBrandClientService;
 import com.om.service.IBrandService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.om.service.IClientService;
+import com.om.utils.AesUtil;
 import com.om.utils.JwtUtils;
 import com.om.utils.Result;
 import com.om.utils.UserContext;
@@ -262,7 +263,7 @@ public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements
         }
 
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         String clientNum = guidDTO.getClientNum();
         //根据客户端编号查询客户端id
         Client client = clientService.lambdaQuery()

+ 2 - 1
src/main/java/com/om/service/impl/BrushFileServiceImpl.java

@@ -11,6 +11,7 @@ import com.om.mapper.BrushFileMapper;
 import com.om.service.IBrushDescriptionService;
 import com.om.service.IBrushFileService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.utils.AesUtil;
 import com.om.utils.JwtUtils;
 import com.om.utils.Result;
 import org.springframework.stereotype.Service;
@@ -46,7 +47,7 @@ public class BrushFileServiceImpl extends ServiceImpl<BrushFileMapper, BrushFile
         String brandCode = dto.getBrandCode();
         String language = dto.getLanguage();
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         String clientNum = guidDTO.getClientNum();
 
         List<BrushFile> brushFileList = this.lambdaQuery()

+ 2 - 1
src/main/java/com/om/service/impl/DiagnosisVersionInfoServiceImpl.java

@@ -12,6 +12,7 @@ import com.om.exception.BadReqException;
 import com.om.mapper.DiagnosisVersionInfoMapper;
 import com.om.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.utils.AesUtil;
 import com.om.utils.JwtUtils;
 import com.om.utils.Result;
 import com.om.utils.UserContext;
@@ -279,7 +280,7 @@ public class DiagnosisVersionInfoServiceImpl extends ServiceImpl<DiagnosisVersio
 
         List<VehicleDates> brandInfo = dto.getBrandInfo();
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         String clientNum = guidDTO.getClientNum();
         if (brandInfo.isEmpty()) {
             throw new BadReqException("该诊断程序不存在");

+ 2 - 5
src/main/java/com/om/service/impl/DiagnosticMenuServiceImpl.java

@@ -20,10 +20,7 @@ import com.om.mapper.DiagnosticMenuMapper;
 import com.om.service.IClientService;
 import com.om.service.IDiagnosticMenuService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.om.utils.FileSizeConverter;
-import com.om.utils.HuaweiObsUtil;
-import com.om.utils.JwtUtils;
-import com.om.utils.Result;
+import com.om.utils.*;
 import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -182,7 +179,7 @@ public class DiagnosticMenuServiceImpl extends ServiceImpl<DiagnosticMenuMapper,
         String version = dto.getVersion();
 
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         String clientNum = guidDTO.getClientNum();
 
         //根据客户端编号查询id

+ 3 - 2
src/main/java/com/om/service/impl/DistributorServiceImpl.java

@@ -17,6 +17,7 @@ import com.om.mapper.DistributorMapper;
 import com.om.service.IDistributorService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.om.service.IUserService;
+import com.om.utils.AesUtil;
 import com.om.utils.JwtUtils;
 import com.om.utils.Result;
 import org.springframework.stereotype.Service;
@@ -152,7 +153,7 @@ public class DistributorServiceImpl extends ServiceImpl<DistributorMapper, Distr
     @Override
     public Result<APpDistributorVO> AppGetById(AppBaseDTO dto) {
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         Integer userId = guidDTO.getUserId();
 
         //查询用户所在的维修厂id
@@ -176,7 +177,7 @@ public class DistributorServiceImpl extends ServiceImpl<DistributorMapper, Distr
     @Override
     public Result Appupdate(APpDistributorVO distributorVO) {
         String guid = distributorVO.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         Integer userId = guidDTO.getUserId();
 
         //查询用户所在的维修厂id

+ 2 - 1
src/main/java/com/om/service/impl/ManualServiceImpl.java

@@ -9,6 +9,7 @@ import com.om.exception.BadReqException;
 import com.om.mapper.ManualMapper;
 import com.om.service.IManualService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.utils.AesUtil;
 import com.om.utils.JwtUtils;
 import com.om.utils.Result;
 import org.springframework.stereotype.Service;
@@ -43,7 +44,7 @@ public class ManualServiceImpl extends ServiceImpl<ManualMapper, Manual> impleme
     public Result<Manual> AppGetByLang(AppBaseDTO dto) {
         String language = dto.getLanguage();
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         String clientNum = guidDTO.getClientNum();
         Manual one = this.lambdaQuery()
                 .eq(Manual::getLang, language)

+ 3 - 3
src/main/java/com/om/service/impl/RepairServiceImpl.java

@@ -76,7 +76,7 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
     @Transactional
     public Result AppCreateReport(APPReportCreateDTO dto) {
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         Integer userId = guidDTO.getUserId();
         User user = userService.getById(userId);
         // 判断数据、
@@ -129,7 +129,7 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
     @Override
     public Result<AppRepairQueryPageVO> AppGetPageList(APPRepairQueryPageDTO dto) {
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         Integer userId = guidDTO.getUserId();
 
         User user = userService.getById(userId);
@@ -575,7 +575,7 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
     @Override
     public Result<String> getH5(AppBaseDTO dto) {
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         Integer userId = guidDTO.getUserId();
 
         Integer diagnosticReportId = dto.getDiagnosticReportId();

+ 29 - 10
src/main/java/com/om/service/impl/UserServiceImpl.java

@@ -10,10 +10,12 @@ import com.om.entity.dto.*;
 import com.om.entity.po.*;
 import com.om.entity.vo.*;
 import com.om.exception.BadReqException;
+import com.om.exception.BizException;
 import com.om.exception.CustomerAuthenticationException;
 import com.om.mapper.UserMapper;
 import com.om.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.utils.AesUtil;
 import com.om.utils.JwtUtils;
 import com.om.utils.Result;
 import com.om.utils.UserContext;
@@ -96,7 +98,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
 
 
         //密码加密
-        password = DigestUtils.md5DigestAsHex(password.getBytes());
+        try {
+            password = AesUtil.Encrypt(password);
+            System.out.println(password);
+        } catch (Exception e) {
+            throw new BizException("密码加密出错");
+        }
         //判断密码是否正确
         if (!password.equals(user.getPassword())) {
             throw new BadReqException("密码错误");
@@ -121,8 +128,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         claims.put("deviceSn", deviceSn);
         claims.put("appVersion", appVersion);
         claims.put("clientNum", clientNum);
-        String guid = jwtUtils.generateToken(claims);
 
+        String guid = AesUtil.generateGuid(claims);
         //封装vo返回
         UserLoginVO userLoginVO = new UserLoginVO();
         // 查询 该用户所属的 维修厂
@@ -145,10 +152,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                     userLoginVO.setVciSn(vciInfo.getVciNum());
                 }
                 vciInfoVO.setVciNum(vciInfo.getVciNum());
-                vciInfoVO.setState(vciInfo.getState());
+                vciInfoVO.setState(String.valueOf(vciInfo.getState()));
                 vciInfoVO.setPairingPwd(vciInfo.getPairingPwd());
                 vciInfoVO.setBluetoothAddress(vciInfo.getBluetoothAddress());
-                vciInfoVO.setIsDefault(userVci.getIsDefault());
+                vciInfoVO.setIsDefault(String.valueOf(userVci.getIsDefault()));
 
                 vciInfoVOList.add(vciInfoVO);
             }
@@ -300,14 +307,19 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             throw new BadReqException("参数为空");
         }
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
+
         Integer userId = guidDTO.getUserId();
 
         User user = getById(userId);
         if (user == null) {
             return Result.error();
         }
-        user.setPassword(DigestUtils.md5DigestAsHex(dto.getNewPassword().getBytes()));
+        try {
+            user.setPassword(AesUtil.Encrypt(dto.getNewPassword()));
+        } catch (Exception e) {
+            throw new BizException("密码加密出错");
+        }
         this.updateById(user);
 
 
@@ -318,10 +330,17 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     public Result register(UserLoginDTO userLoginDTO) {
         User user = new User();
         if (userLoginDTO.getUsername() == null || userLoginDTO.getPassword() == null) {
-            return Result.error();
+            return Result.error().message("用户名密码为空");
+        }
+        if (userLoginDTO.getPassword().equals(userLoginDTO.getRePassword())){
+            return Result.error().message("两次密码不一样");
         }
         user.setUsername(userLoginDTO.getUsername());
-        user.setPassword(userLoginDTO.getPassword());
+        try {
+            user.setPassword(AesUtil.Encrypt(userLoginDTO.getPassword()));
+        } catch (Exception e) {
+            throw new BizException("密码加密出错");
+        }
         boolean save = save(user);
         if (!save) {
             return Result.error();
@@ -332,7 +351,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     @Override
     public Result updateUserName(AppBaseDTO dto) {
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         Integer userId = guidDTO.getUserId();
 
         User user = getById(userId);
@@ -373,7 +392,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             throw new BadReqException("参数为空");
         }
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         Integer userId = guidDTO.getUserId();
         String vciSn = dto.getVciSn();
         VciInfo vciInfo = vciInfoService.lambdaQuery()

+ 2 - 1
src/main/java/com/om/service/impl/VciInfoServiceImpl.java

@@ -13,6 +13,7 @@ import com.om.mapper.UserMapper;
 import com.om.mapper.VciInfoMapper;
 import com.om.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.utils.AesUtil;
 import com.om.utils.JwtUtils;
 import com.om.utils.Result;
 import org.springframework.context.annotation.Bean;
@@ -189,7 +190,7 @@ public class VciInfoServiceImpl extends ServiceImpl<VciInfoMapper, VciInfo> impl
         }
 
         String guid = dto.getGuid();
-        GuidDTO guidDTO = jwtUtils.getGuidDTOFromToken(guid);
+        GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
         String clientNum = guidDTO.getClientNum();
         String language = dto.getLanguage();
         Integer userId = guidDTO.getUserId();

+ 141 - 0
src/main/java/com/om/utils/AesUtil.java

@@ -0,0 +1,141 @@
+package com.om.utils;
+
+
+
+import com.om.entity.dto.GuidDTO;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.HashMap;
+import java.util.Map;
+
+public class AesUtil {
+    private static final String key = "hG75bY3u9zXkQpD2";
+
+
+    /**
+     * 加密
+     * @param sSrc 需要加密的字符串
+     * @return
+     * @throws Exception
+     */
+    public static String Encrypt(String sSrc) throws Exception {
+
+        // 判断Key是否为16位
+        if (key.length() != 16) {
+            System.out.print("Key长度不是16位");
+            return null;
+        }
+        byte[] raw = key.getBytes("utf-8");
+        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
+        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
+
+        return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
+    }
+
+    /**
+     * 解密
+     * @param sSrc 需要解密的字符串
+     * @return
+     * @throws Exception
+     */
+    public static String Decrypt(String sSrc) throws Exception {
+        try {
+            // 判断Key是否正确
+            if (key == null) {
+                System.out.print("Key为空null");
+                return null;
+            }
+            // 判断Key是否为16位
+            if (key.length() != 16) {
+                System.out.print("Key长度不是16位");
+                return null;
+            }
+            byte[] raw = key.getBytes("utf-8");
+            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
+            byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密
+            try {
+                byte[] original = cipher.doFinal(encrypted1);
+                String originalString = new String(original,"utf-8");
+                return originalString;
+            } catch (Exception e) {
+                System.out.println(e.toString());
+                return null;
+            }
+        } catch (Exception ex) {
+            System.out.println(ex.toString());
+            return null;
+        }
+    }
+
+
+    public static String generateGuid(Map<String, Object> claims){
+        try {
+            String encrypt = Encrypt(claims.toString());
+            return encrypt;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public static GuidDTO getGuidDTOFromGuid(String guid){
+        GuidDTO dto = new GuidDTO();
+        try {
+            String decrypt = Decrypt(guid);
+            GuidDTO guidDTO = parseGuidDTO(decrypt);
+            return guidDTO;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    public static GuidDTO parseGuidDTO(String guid) {
+        guid = guid.substring(1, guid.length() - 1); // 去除字符串两端的大括号
+        String[] keyValuePairs = guid.split(", ");
+
+        Map<String, String> keyValueMap = new HashMap<>();
+        for (String pair : keyValuePairs) {
+            String[] keyValue = pair.split("=");
+            if(keyValue.length!=2){
+                continue;
+            }
+            keyValueMap.put(keyValue[0], keyValue[1]);
+        }
+
+        String appVersion = keyValueMap.get("appVersion");
+        int u_id = Integer.parseInt(keyValueMap.get("u_id"));
+        String clientNum = keyValueMap.get("clientNum");
+        String deviceSn = keyValueMap.get("deviceSn");
+
+        return new GuidDTO(u_id,deviceSn,appVersion,clientNum);
+    }
+
+
+    public static void main(String[] args) throws Exception {
+        /*
+         * 此处使用AES-128-ECB加密模式,key需要为16位。
+         */
+        // 加密
+        Map<String,Object> claims = new HashMap<>();
+        claims.put("u_id", 1);
+        claims.put("deviceSn", "123456");
+        claims.put("appVersion", "v3.0");
+        claims.put("clientNum", "1234");
+        String guid = generateGuid(claims);
+        System.out.println("加密后的字串是:" + guid);
+
+        // 解密
+        GuidDTO guidDTOFromGuid = getGuidDTOFromGuid(guid);
+        System.out.println("解密后的字串是:" + guidDTOFromGuid);
+
+        //加密密码
+        String password = Encrypt("123456");
+        System.out.println("加密的密码是:"+password);
+    }
+}
+