Michael Wang 3 роки тому
батько
коміт
359c11c416

+ 5 - 6
src/features/OnlineExam/StartExamModal.vue

@@ -9,8 +9,9 @@ import router from "@/router";
 import { checkExamInProgress } from "../UserLogin/useExamInProgress";
 import { store } from "@/store/store";
 import { closeMediaStream } from "@/utils/camera";
-import { decryptB, decryptC, encryptB, encryptC, getKey } from "@/utils/utils";
+import { getKey } from "@/utils/utils";
 import { AxiosError } from "axios";
+import { doDec, doEnc } from "@/utils/encDec";
 
 const { course } = defineProps<{ course: OnlineExam }>();
 
@@ -234,12 +235,10 @@ async function enterExam() {
     });
 
     const key = getKey(timestamp);
-    // console.log({ rawStr, key });
+    console.log({ rawStr, key });
 
     let encryptParams = "";
-    // if (store.user.salt === "E") {
-    encryptParams = encryptC(encryptB(rawStr), key);
-    // }
+    encryptParams = doEnc(rawStr, key);
 
     try {
       let res = await httpApp.post<string>(
@@ -252,7 +251,7 @@ async function enterExam() {
         }
       );
 
-      res.data = decryptB(decryptC(res.data, key));
+      res.data = doDec(res.data, key);
       // console.log(res.data);
       const newRes: {
         courseName: string;

+ 2 - 2
src/features/UserLogin/UserLogin.vue

@@ -15,7 +15,7 @@ import { createEncryptLog, createUserDetailLog } from "@/utils/logger";
 import { MD5 } from "@/utils/md5";
 import { getScreenShot, isElectron } from "@/utils/nativeMethods";
 import ua from "@/utils/ua";
-import { decryptLogin, setSalt } from "@/utils/utils";
+import { decryptLogin } from "@/utils/utils";
 import { CloseCircleOutline, LockClosed, Person } from "@vicons/ionicons5";
 import { FormItemInst, FormRules } from "naive-ui";
 import { onMounted, watch } from "vue";
@@ -290,7 +290,7 @@ async function loginForuser() {
       const str = decryptLogin(res.data.content as string, key);
       res.data.content = JSON.parse(str);
       console.log(res.data.content);
-      setSalt(res.data.content.salt as string);
+      // setSalt(res.data.content.salt as string);
       // delete res.data.content.salt;
       // 准备下面的登录token
       store.user = res.data.content;

+ 81 - 0
src/utils/encDec.ts

@@ -0,0 +1,81 @@
+import {
+  decryptA,
+  decryptB,
+  decryptC,
+  decryptD,
+  decryptE,
+  encryptA,
+  encryptB,
+  encryptC,
+  encryptD,
+  encryptE,
+  getSalt,
+} from "./utils";
+
+function getEncMethod(code: string) {
+  if (code === "A") {
+    return encryptA;
+  }
+  if (code === "B") {
+    return encryptB;
+  }
+  if (code === "C") {
+    return encryptC;
+  }
+  if (code === "D") {
+    return encryptD;
+  }
+  if (code === "E") {
+    return encryptE;
+  }
+  return encryptA;
+}
+
+function getDecMethod(code: string) {
+  if (code === "A") {
+    return decryptA;
+  }
+  if (code === "B") {
+    return decryptB;
+  }
+  if (code === "C") {
+    return decryptC;
+  }
+  if (code === "D") {
+    return decryptD;
+  }
+  if (code === "E") {
+    return decryptE;
+  }
+  return decryptA;
+}
+
+/** 对原始字符串进行加密 */
+export function doEnc(rawStr: string, key: string) {
+  const salt = getSalt();
+
+  const methods = salt.split("");
+
+  let res = rawStr;
+  for (const code of methods) {
+    const m = getEncMethod(code);
+    res = m(res, key);
+  }
+
+  return res;
+}
+
+/** 对加密字符串进行依次解密 */
+export function doDec(rawStr: string, key: string) {
+  const salt = getSalt();
+
+  const methods = salt.split("");
+
+  let res = rawStr;
+  for (const code of methods.reverse()) {
+    const m = getDecMethod(code);
+    res = m(res, key);
+  }
+
+  return res;
+}

+ 5 - 5
src/utils/utils.ts

@@ -55,13 +55,13 @@ export function toChineseNumber(num: number) {
   return ret;
 }
 
-let salt: string;
-export function setSalt(_salt: string) {
-  salt = _salt;
-}
+// let salt: string;
+// export function setSalt(_salt: string) {
+//   salt = _salt;
+// }
 
 export function getSalt() {
-  return salt;
+  return store.user.salt;
 }
 
 export function getKey(timestamp: number) {