Ver Fonte

对求职人员手机号、身份证号存储、传输过程进行加密

lizeyu há 9 meses atrás
pai
commit
3fae01323a

+ 19 - 0
h5app/src/utils/crypto.ts

@@ -5,6 +5,7 @@ interface DesModel {
   token: string,
   tm: string
 }
+const textKey = "0448fa97-c645-444b-aeae-d26366f98f4d";
 
 const crypto = {
   encryptDes (value: string) {
@@ -28,6 +29,24 @@ const crypto = {
   },
   MD5 (value: string) {
     return cryptoJs.MD5(value)
+  },
+  encryptDesText (value: any) {
+    if(!value){
+      return "";
+    }
+
+    const option = { mode: cryptoJs.mode.ECB, padding: cryptoJs.pad.Pkcs7 }
+    const encrypted = cryptoJs.DES.encrypt(value, cryptoJs.enc.Utf8.parse(textKey), option)
+    return encrypted.toString()
+  },
+  decryptDesText (value: any) {
+    if(!value){
+      return "";
+    }
+
+    const option = { mode: cryptoJs.mode.ECB, padding: cryptoJs.pad.Pkcs7 }
+    const decrypted = cryptoJs.DES.decrypt(value, cryptoJs.enc.Utf8.parse(textKey), option)
+    return decrypted.toString(cryptoJs.enc.Utf8)
   }
 }
 

+ 11 - 0
h5app/src/views/pages/jobUserInfo/userEdit.vue

@@ -476,6 +476,7 @@ import {getJobHuntListByJobUserID} from "@/api/jobHuntInfo";
 import dayjs from "dayjs";
 import CategorySelection from "@/components/ocCategorySelection.vue";
 import {getPosition} from "@/utils/position";
+import crtyptoHelp from "@/utils/crypto"
 
 interface SelectProps {
   name: string,
@@ -741,9 +742,16 @@ export default defineComponent({
         inputDataValidate();
         if(isAllowCommit.value){
           baseInfoData.baseData.loginUserID = curStepData.value.loginUserID;
+          const userMobile = baseInfoData.baseData.userMobile;
+          const identityNumber = baseInfoData.baseData.identityNumber;
+          baseInfoData.baseData.userMobile = crtyptoHelp.encryptDesText(baseInfoData.baseData.userMobile);
+          baseInfoData.baseData.identityNumber = crtyptoHelp.encryptDesText(baseInfoData.baseData.identityNumber);
           baseInfoSave(baseInfoData.baseData).then(result => {
             if (result) {
               router.push({path: '/jobUserInfo/userEdit', query: {reload:0,jobUserID: baseInfoData.baseData.jobUserID,status:2,loginUserId:curStepData.value.loginUserID}});
+            }else{
+              baseInfoData.baseData.userMobile = userMobile;
+              baseInfoData.baseData.identityNumber = identityNumber;
             }
           });
         }
@@ -840,6 +848,9 @@ export default defineComponent({
         const reqData = await getJobUserById(jobUserID,userId);
         baseInfoData.baseData = reqData;
         baseInfoData.baseData.openId = openId;
+
+        baseInfoData.baseData.userMobile = crtyptoHelp.decryptDesText(baseInfoData.baseData.userMobile);
+        baseInfoData.baseData.identityNumber = crtyptoHelp.decryptDesText(baseInfoData.baseData.identityNumber);
         console.log("当前baseInfoData",baseInfoData.baseData);
         await getStreetList();
       }

+ 7 - 2
h5app/src/views/pages/jobhunt/detail.vue

@@ -312,6 +312,7 @@ import {useRoute, useRouter} from "vue-router";
 import {onIonViewDidEnter} from "@ionic/vue";
 import {arrowBackOutline} from 'ionicons/icons';
 import dayjs from "dayjs";
+import crtyptoHelp from "@/utils/crypto";
 
 interface FormData{
   dataModel:any
@@ -375,8 +376,12 @@ export default defineComponent({
           formData.dataModel.tagName += it.labelName+" ";
         })
       }
-      const replaceStr =  formData.dataModel.identityNumber.substring(3,15);
-      formData.dataModel.identityNumberShow = String(formData.dataModel.identityNumber).replace(replaceStr,'************');
+
+
+      // const identityNumber = crtyptoHelp.decryptDesText(formData.dataModel.identityNumber);
+      // const replaceStr =  identityNumber.substring(3,15);
+      // formData.dataModel.identityNumberShow = String(identityNumber).replace(replaceStr,'************');
+      formData.dataModel.userMobile = crtyptoHelp.decryptDesText(formData.dataModel.userMobile);
       console.log("dataModel",formData.dataModel);
 
       dicHighestDegree.value = await getSysDictionaryList("HighestDegree");

+ 10 - 0
h5app/src/views/pages/jobhunt/edit.vue

@@ -492,6 +492,7 @@ import {useUserStore} from "@/store/modules/user";
 import CategorySelection from "@/components/ocCategorySelection.vue";
 import {getPosition} from "@/utils/position";
 import LabelSelection from "@/components/labelSelection.vue";
+import crtyptoHelp from "@/utils/crypto";
 
 interface SelectProps {
   name: string,
@@ -760,9 +761,16 @@ export default defineComponent({
         inputDataValidate();
         if(isAllowCommit.value){
           console.log("当前数据",baseInfoData.baseData);
+          const userMobile = baseInfoData.baseData.userMobile;
+          const identityNumber = baseInfoData.baseData.identityNumber;
+          baseInfoData.baseData.userMobile = crtyptoHelp.encryptDesText(baseInfoData.baseData.userMobile);
+          baseInfoData.baseData.identityNumber = crtyptoHelp.encryptDesText(baseInfoData.baseData.identityNumber);
           baseInfoSave(baseInfoData.baseData).then(result => {
             if (result) {
               router.push({path: './edit', query: {reload:0,jobUserID: baseInfoData.baseData.jobUserID,status:2}});
+            }else{
+              baseInfoData.baseData.userMobile = userMobile;
+              baseInfoData.baseData.identityNumber = identityNumber;
             }
           });
         }
@@ -862,6 +870,8 @@ export default defineComponent({
         const reqData = await getJobUserById(jobUserID,curUserID);
         isEdit.value = jobUserID != null;
         baseInfoData.baseData = reqData;
+        baseInfoData.baseData.userMobile = crtyptoHelp.decryptDesText(baseInfoData.baseData.userMobile);
+        baseInfoData.baseData.identityNumber = crtyptoHelp.decryptDesText(baseInfoData.baseData.identityNumber);
         baseInfoData.baseData.loginUserID = curUserID;
         //console.log('baseData',baseInfoData.baseData);
         await getStreetList();

+ 2 - 0
h5app/src/views/pages/wxMessage/jobUserInfo.vue

@@ -86,6 +86,7 @@ import {getUrlParams} from "../../../utils/urlUtils";
 import {getEducationList, getExperienceList, getJobUserById} from "../../../api/jobUserInfo";
 import {alertController} from "@ionic/vue";
 import dayjs from "dayjs";
+import crtyptoHelp from "@/utils/crypto";
 
 const presentAlert = async (message) => {
   const alert = await alertController.create({
@@ -121,6 +122,7 @@ export default defineComponent({
     const getJobUserInfo = async (id) => {
       getJobUserById(id).then((data) => {
         jobUserInfo.value = data;
+        jobUserInfo.value.userMobile = crtyptoHelp.decryptDesText(jobUserInfo.value.userMobile);
       });
 
       getEducationList(id).then((data) => {

+ 5 - 0
src/main/java/com/hz/employmentsite/mapper/cquery/JobUserCQuery.java

@@ -1,5 +1,6 @@
 package com.hz.employmentsite.mapper.cquery;
 
+import com.hz.employmentsite.model.PcJobuser;
 import com.hz.employmentsite.vo.jobUserManager.JobUserVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -14,4 +15,8 @@ public interface JobUserCQuery {
                                       @Param("workTime") String workTime, @Param("curLoginUserSiteID") String curLoginUserSiteID,
                                       @Param("regionCode") String regionCode, @Param("startDate") Date startDate,
                                       @Param("endDate") Date endDate);
+
+    List<PcJobuser> getJobUserIdentityNumber();
+
+    List<PcJobuser> getJobUserUserMobile();
 }

+ 40 - 6
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/JobUserServiceImpl.java

@@ -9,7 +9,9 @@ import com.hz.employmentsite.mapper.cquery.LabelCQuery;
 import com.hz.employmentsite.model.*;
 import com.hz.employmentsite.services.service.jobUserManager.JobUserService;
 import com.hz.employmentsite.services.service.system.DictionaryService;
+import com.hz.employmentsite.util.CalculateUtils;
 import com.hz.employmentsite.util.DateUtils;
+import com.hz.employmentsite.util.DesUtils;
 import com.hz.employmentsite.util.StringUtils;
 import com.hz.employmentsite.vo.jobUserManager.JobUserVo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,6 +33,10 @@ public class JobUserServiceImpl implements JobUserService {
     private StringUtils stringUtils;
     @Autowired
     private DateUtils dateUtils;
+    @Autowired
+    private DesUtils desUtils;
+    @Autowired
+    private CalculateUtils calculateUtils;
 
     @Autowired
     private DictionaryService dictionaryService;
@@ -74,14 +80,17 @@ public class JobUserServiceImpl implements JobUserService {
         }
         PageHelper.startPage(pageIndex, pageSize);
         List<JobUserVo> list = jobUserCQuery.selectJobUserList(stringUtils.ListToInSql(jobUserIDList), name, siteId, jobStatus, sexId, educationTypeId, emphasisTypeId, createUserId, workTime, curLoginUserSiteID, regionCode, startDate, endDate);
-//        // 信息脱敏
-//        list.forEach(item -> {
-//            item.setAge(dateUtils.getAgeForIdCard(item.getIdentityNumber()));
-//            item.setIdentityNumber(stringUtils.desensitizeData(item.getIdentityNumber(), "************", 3, 4));
-//            item.setSocialSecurityCard(stringUtils.desensitizeData(item.getSocialSecurityCard(), "****", 3, 3));
-//        });
+        // 信息脱敏
+        list.forEach(item -> {
+            item.setUserMobile(calculateUtils.maskMobile(desUtils.decoderText(item.getUserMobile())));
+            String idNumber = desUtils.decoderText(item.getIdentityNumber());
+            item.setIdentityNumber(idNumber);
+            item.setAge(calculateUtils.calculateAge(idNumber));
+        });
         PageInfo<JobUserVo> result = new PageInfo(list);
 
+        setJobUserDes();
+
         return result;
     }
 
@@ -98,6 +107,25 @@ public class JobUserServiceImpl implements JobUserService {
         return dataResult;
     }
 
+    public void setJobUserDes() {
+
+        List<PcJobuser> list1 = jobUserCQuery.getJobUserIdentityNumber();
+        if(list1.size()>0){
+            for (var item: list1) {
+                item.setIdentityNumber(desUtils.encoderText(item.getIdentityNumber()));
+                pcJobuserMapper.updateByPrimaryKey(item);
+            }
+        }
+
+        List<PcJobuser> list2 = jobUserCQuery.getJobUserUserMobile();
+        if(list2.size()>0){
+            for (var item: list2) {
+                item.setUserMobile(desUtils.encoderText(item.getUserMobile()));
+                pcJobuserMapper.updateByPrimaryKey(item);
+            }
+        }
+    }
+
     @Override
     public JobUserVo getDataById(String id) {
 
@@ -108,6 +136,7 @@ public class JobUserServiceImpl implements JobUserService {
         JobUserVo data = jobUserCQuery.selectJobUserList(stringUtils.ListToInSql(Arrays.asList(id)), null, null, null, null, null, null, null, null,null,null,null,null).stream().findFirst().orElse(null);
         if(data!=null){
             data.listLabel = labelCQuery.getUserLabelList(id);
+            data.setAge(calculateUtils.calculateAge(desUtils.decoderText(data.getIdentityNumber())));
         }
         return data;
     }
@@ -711,6 +740,8 @@ public class JobUserServiceImpl implements JobUserService {
                             errorInfo += "性别与身份证号不匹配!";
                         }
                     }
+                    //文本加密
+                    item.setIdentityNumber(desUtils.encoderText(item.getIdentityNumber()));
                 }else{
                     errorInfo += "身份证号码不合法!";
                 }
@@ -763,6 +794,9 @@ public class JobUserServiceImpl implements JobUserService {
             else{
                 if(!userMobileIsValid(item.getUserMobile())){
                     errorInfo += "联系电话不合法!";
+                }else{
+                    //文本加密
+                    item.setUserMobile(desUtils.encoderText(item.getUserMobile()));
                 }
             }
 

+ 14 - 2
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/RecommendMgtServiceImpl.java

@@ -8,6 +8,8 @@ import com.hz.employmentsite.mapper.cquery.RecommendMgtCQuery;
 import com.hz.employmentsite.model.*;
 import com.hz.employmentsite.services.service.WechatService;
 import com.hz.employmentsite.services.service.jobUserManager.RecommendMgtService;
+import com.hz.employmentsite.util.CalculateUtils;
+import com.hz.employmentsite.util.DesUtils;
 import com.hz.employmentsite.util.StringUtils;
 import com.hz.employmentsite.vo.jobUserManager.*;
 import lombok.extern.slf4j.Slf4j;
@@ -41,6 +43,10 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
 
     @Autowired
     private PcPostMapper pcPostMapper;
+    @Autowired
+    private DesUtils desUtils;
+    @Autowired
+    private CalculateUtils calculateUtils;
 
     @Override
     public PageInfo<RecommendMgtVo> getList(Integer page, Integer rows, String name,
@@ -78,6 +84,10 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
             list = recommendMgtCQuery.getRecommendMgtList(null, name, companyName, recommendType, entryState, pushName, qzProfessionName, zpProfessionName, siteID, regionCode, startDate, endDate, stringUtils.ListToInSql(curLoginUserSiteJobHuntIDs));
         }
 
+        list.forEach(item->{
+            item.setUserMobile(calculateUtils.maskMobile(desUtils.decoderText(item.getUserMobile())));
+        });
+
         PageInfo<RecommendMgtVo> result = new PageInfo(list);
 
         return result;
@@ -158,9 +168,11 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
         PageHelper.startPage(page, rows);
         List<RecommendJobVo> list = recommendMgtCQuery.getRecommendJobList(postID, professionID, userName, type, cultureRank, keyPersonType, parentProfessionID, workYear, minSalary, maxSalary);
         list.forEach(x -> {
-            if (stringUtils.IsNullOrEmpty(x.recommendMgtID)) {
-                x.recommendMgtID = UUID.randomUUID().toString();
+            if (stringUtils.IsNullOrEmpty(x.getRecommendMgtID())) {
+                x.setRecommendMgtID(UUID.randomUUID().toString());
             }
+
+            x.setUserMobile(calculateUtils.maskMobile(desUtils.decoderText(x.getUserMobile())));
         });
         PageInfo<RecommendJobVo> result = new PageInfo(list);
         return result;

+ 79 - 0
src/main/java/com/hz/employmentsite/util/CalculateUtils.java

@@ -0,0 +1,79 @@
+package com.hz.employmentsite.util;
+
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.Period;
+import java.time.format.DateTimeFormatter;
+
+@Component
+public class CalculateUtils {
+
+    /**
+     *身份证脱敏
+     *
+     * @param data 身份证
+     * @return 脱敏后的身份证
+     * */
+    public String maskIdentityNumber(String data) {
+
+        if (data == null || data.length() < 9) {
+            return data;
+        }
+        int length = data.length();
+        String firstThree = data.substring(0, 6);
+        String lastFour = data.substring(length - 3);
+
+        StringBuilder maskedId = new StringBuilder(firstThree);
+        for (int i = 0; i < length - 9; i++) {
+            maskedId.append('*');
+        }
+        maskedId.append(lastFour);
+
+        return maskedId.toString();
+    }
+
+    /**
+     *手机号码脱敏
+     *
+     * @param data 手机号码
+     * @return 脱敏后的手机号码
+     * */
+    public String maskMobile(String data) {
+
+        if (data == null || data.length() < 7) {
+            return data;
+        }
+        int length = data.length();
+        String firstThree = data.substring(0, 3);
+        String lastFour = data.substring(length - 4);
+
+        StringBuilder maskedId = new StringBuilder(firstThree);
+        for (int i = 0; i < length - 7; i++) {
+            maskedId.append('*');
+        }
+        maskedId.append(lastFour);
+
+        return maskedId.toString();
+    }
+
+    public Integer calculateAge(String idNumber) {
+        // 检查身份证号码的有效性
+        if (idNumber == null || idNumber.length() != 18) {
+            return null;
+        }
+
+        // 提取出生日期信息
+        String birthDateString = idNumber.substring(6, 14);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        LocalDate birthDate = LocalDate.parse(birthDateString, formatter);
+
+        // 获取当前日期
+        LocalDate currentDate = LocalDate.now();
+
+        // 计算年龄
+        return Period.between(birthDate, currentDate).getYears();
+    }
+
+
+}

+ 62 - 0
src/main/java/com/hz/employmentsite/util/DesUtils.java

@@ -22,6 +22,7 @@ public class DesUtils {
     private String ENCODE = "utf-8";
     private String desStr = "DES";
     private String desVi = "DES/ECB/PKCS5Padding";
+    private String desTextKey = "0448fa97-c645-444b-aeae-d26366f98f4d";
 
     /**
      * 用des加密
@@ -86,4 +87,65 @@ public class DesUtils {
 
         return result;
     }
+
+
+    /**
+     * 用des 进行文本加密
+     **/
+    public String encoderText(String data) {
+
+        try {
+            if(data == null || data.length() == 0){
+                return "";
+            }
+
+            // 创建一个DESKeySpec对象
+            DESKeySpec desKey = new DESKeySpec(desTextKey.getBytes(ENCODE));
+            // 创建一个密匙工厂
+            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(desStr);
+            // 将DESKeySpec对象转换成SecretKey对象
+            SecretKey securekey = keyFactory.generateSecret(desKey);
+            // Cipher对象实际完成解密操作
+            Cipher cipher = Cipher.getInstance(desVi);
+            // 用密匙初始化Cipher对象
+            cipher.init(Cipher.ENCRYPT_MODE, securekey);
+            // 真正开始解密操作
+            byte[] rBytes = cipher.doFinal(data.getBytes(ENCODE));
+            //加base64
+            return Base64.getEncoder().encodeToString(rBytes);
+        } catch (Exception ex) {
+            return "";
+        }
+    }
+
+    /**
+     * 用des 进行文本解密
+     **/
+    public String decoderText(String data) {
+        try {
+            if(data == null || data.length() == 0){
+                return "";
+            }
+
+            //解base64
+            byte[] buftoken = Base64.getDecoder().decode(data);
+            // 创建一个DESKeySpec对象
+            DESKeySpec desKey = new DESKeySpec(desTextKey.getBytes(ENCODE));
+            // 创建一个密匙工厂
+            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(desStr);
+            // 将DESKeySpec对象转换成SecretKey对象
+            SecretKey securekey = keyFactory.generateSecret(desKey);
+            // Cipher对象实际完成解密操作
+            Cipher cipher = Cipher.getInstance(desVi);
+            // 用密匙初始化Cipher对象
+            cipher.init(Cipher.DECRYPT_MODE, securekey);
+            // 真正开始解密操作
+            byte[] rBytes = cipher.doFinal(buftoken);
+            return new String(rBytes, ENCODE);
+
+        } catch (Exception ex) {
+            return "";
+        }
+    }
+
 }

+ 3 - 0
src/main/java/com/hz/employmentsite/vo/jobUserManager/RecommendCompanyPostVo.java

@@ -1,5 +1,8 @@
 package com.hz.employmentsite.vo.jobUserManager;
 
+import lombok.Data;
+
+@Data
 public class RecommendCompanyPostVo {
     public String recommendMgtID;
     public String postID;

+ 3 - 0
src/main/java/com/hz/employmentsite/vo/jobUserManager/RecommendJobVo.java

@@ -1,5 +1,8 @@
 package com.hz.employmentsite.vo.jobUserManager;
 
+import lombok.Data;
+
+@Data
 public class RecommendJobVo {
     public String recommendMgtID;
     public String jobhuntID;

Diff do ficheiro suprimidas por serem muito extensas
+ 9 - 3
src/main/resources/mapping/cquery/JobUserCQuery.xml


+ 19 - 0
vue/src/utils/crypto.ts

@@ -9,6 +9,7 @@ interface DesModel {
   token: string,
   tm: string
 }
+const textKey = "0448fa97-c645-444b-aeae-d26366f98f4d";
 
 const crypto = {
   encryptDes (value: string) {
@@ -32,6 +33,24 @@ const crypto = {
   },
   MD5 (value: string) {
     return cryptoJs.MD5(value)
+  },
+  encryptDesText (value: string) {
+    if(!value){
+      return "";
+    }
+
+    const option = { mode: cryptoJs.mode.ECB, padding: cryptoJs.pad.Pkcs7 }
+    const encrypted = cryptoJs.DES.encrypt(value, cryptoJs.enc.Utf8.parse(textKey), option)
+    return encrypted.toString()
+  },
+  decryptDesText (value: string) {
+    if(!value){
+      return "";
+    }
+
+    const option = { mode: cryptoJs.mode.ECB, padding: cryptoJs.pad.Pkcs7 }
+    const decrypted = cryptoJs.DES.decrypt(value, cryptoJs.enc.Utf8.parse(textKey), option)
+    return decrypted.toString(cryptoJs.enc.Utf8)
   }
 }
 

+ 2 - 2
vue/src/views/companyService/post/index.vue

@@ -22,9 +22,9 @@
         </a-col>
         <a-col :span="6">
           <a-form-item label="招聘人数" :label-col="{span:6}" name="recruitCount">
-            <a-input type="number" v-model:value="searchParams.minCount" style="width:120px;" placeholder=""/>
+            <a-input type="number" v-model:value="searchParams.minCount" style="width:80px;" placeholder=""/>
             <label style="margin:10px;">-</label>
-            <a-input type="number" v-model:value="searchParams.maxCount" style="width:120px;" placeholder=""/>
+            <a-input type="number" v-model:value="searchParams.maxCount" style="width:80px;" placeholder=""/>
           </a-form-item>
         </a-col>
         <a-col :span="6" style="text-align: left">

+ 5 - 0
vue/src/views/jobUserManager/jobuser/edit.vue

@@ -549,6 +549,7 @@ import {getSiteList} from "@/api/baseSettings/siteInfo";
 import {getInfo} from "@/api/account";
 import dayjs from "dayjs";
 import SelectLabel from "@/views/baseSettings/label/selectLabel.vue";
+import crtyptoHelp from '@/utils/crypto';
 
 interface FormState {
   dataModel: any;
@@ -857,6 +858,8 @@ export default defineComponent(
         if(isAllowCommit.value){
           formState.dataModel.jobEducation = educationData.value;
           formState.dataModel.jobExperience = experienceData.value;
+          formState.dataModel.userMobile = crtyptoHelp.encryptDesText(formState.dataModel.userMobile);
+          formState.dataModel.identityNumber = crtyptoHelp.encryptDesText(formState.dataModel.identityNumber);
           save(formState.dataModel).then(result => {
             if (result) {
               onClose(1)
@@ -931,6 +934,8 @@ export default defineComponent(
         getInfo().then((loginUserInfo:any)=>{
           getDataById(id,loginUserInfo.userID,null).then(data => {
             formState.dataModel = data;
+            formState.dataModel.userMobile = crtyptoHelp.decryptDesText(formState.dataModel.userMobile);
+            formState.dataModel.identityNumber = crtyptoHelp.decryptDesText(formState.dataModel.identityNumber);
             if (formState.dataModel.regionCode) {
               changeCity();
             }

+ 4 - 0
vue/src/views/jobUserManager/jobuser/vitae.vue

@@ -120,6 +120,7 @@ import dayjs from "dayjs";
 import {getSysDictionaryList} from "@/api/system/dictionary";
 import {getJobHuntList} from "@/api/jobUserManager/jobhunt";
 import {useUserStore} from "@/store/modules/user";
+import crtyptoHelp from "@/utils/crypto";
 
 const userStore = useUserStore();
 const userInfo = ref(userStore.getUserInfo)
@@ -252,6 +253,9 @@ const loadData = (id: any) => {
     Object.keys(jobUserInfo).forEach(key => {
       jobUserInfo[key] = data[key];
     })
+
+    jobUserInfo.userMobile = crtyptoHelp.decryptDesText(jobUserInfo.userMobile);
+    jobUserInfo.identityNumber = crtyptoHelp.decryptDesText(jobUserInfo.identityNumber);
   });
 };