sunlupeng vor 2 Jahren
Ursprung
Commit
c96762b8ae

+ 1 - 0
package.json

@@ -10,6 +10,7 @@
   "dependencies": {
     "axios": "0.17.1",
     "core-js": "^3.8.3",
+    "crypto-js": "4.1.1",
     "element-china-area-data": "^6.0.2",
     "element-ui": "^2.15.12",
     "js-cookie": "2.2.0",

+ 66 - 0
src/utils/AES.js

@@ -0,0 +1,66 @@
+import CryptoJS from 'crypto-js'
+const keyStr = '1234567890123456'
+export default {
+  // 加密
+  encrypt(word) {
+    // 判断是否存在keyStr,不存在就用默认的keyStr(注意:这个keyStr必需要前后端统一,不然双方加密解密后会不相同。调用generatekey方法生成)
+    // keyStr = keyStr ? keyStr : '1grLx91U40VawzhRAm7E'
+    const key = CryptoJS.enc.Utf8.parse(keyStr)
+    const srcs = CryptoJS.enc.Utf8.parse(word)
+    const encrypted = CryptoJS.AES.encrypt(srcs, key, {
+      mode: CryptoJS.mode.ECB,
+      padding: CryptoJS.pad.Pkcs7
+    })
+    return encrypted.toString()
+  },
+  // AES的ECB加密(还有CBC模式)
+  encryptECB(word) {
+    // 这里是密钥
+    var keyHex = CryptoJS.enc.Utf8.parse(keyStr)
+    // 这里是demo样本 一些是json,
+    // var plaintText = "{'a':'SSS'}"
+    // 一些是string
+    var plaintText = word
+
+    // 用ECB进行加密
+    var encryptedData = CryptoJS.AES.encrypt(
+      // JSON.stringify(plaintText),
+      plaintText,
+      keyHex,
+      {
+        // iv: CryptoJS.enc.Utf8.parse('0000000000000000'), // 16位
+        mode: CryptoJS.mode.ECB, // 加密模式
+        padding: CryptoJS.pad.Pkcs7
+      })
+    // 打印出加密后的
+    // console.log(encryptedData.toString(), '加密后')
+    return encryptedData.toString();
+  },
+
+  // 解密
+  decrypt(word) {
+    // 这里是密钥
+    var keyHex = CryptoJS.enc.Utf8.parse(keyStr)
+    // 这里需要将16进制的数据转为base64
+    // var encryptedBase64Str = CryptoJS.enc.Hex.parse(word)
+    // // console.log('解密前Base64:' + encryptedBase64Str)
+    // var str = CryptoJS.enc.Base64.stringify(encryptedBase64Str)
+    // console.log("str=",str)
+    // 接下来就是解密了,讲最后Base64形式的进行解密
+    var decryptedData = CryptoJS.AES.decrypt(
+      word,
+      keyHex,
+      {
+        // iv: CryptoJS.enc.Hex.parse('0000000000000000'), // 16位
+        mode: CryptoJS.mode.ECB, // 加密模式
+        padding: CryptoJS.pad.Pkcs7
+      }
+    )
+    return CryptoJS.enc.Utf8.stringify(decryptedData).toString()
+    // console.log("decryptedData=",decryptedData)
+    // 这里会产生制表符需要清除掉(如果解密后数据少于16位会以空格补齐)
+    // return decryptedData.toString(CryptoJS.enc.Utf8).replace(/\0/g, '')
+  },
+
+
+}

+ 6 - 3
src/views/HomeView/AnswerGame/AnswerGame.vue

@@ -64,6 +64,7 @@
 </template>
 <script>
 import { homeData,questionList,submitAnswer } from "@/api/allApi";
+import AES from "@/utils/AES.js";
 import SiderInfo from '@/components/SiderInfo.vue';
 import { mapGetters } from 'vuex';
 export default{
@@ -115,9 +116,11 @@ export default{
     },
     getQuestionList(){
         questionList({}).then(response=>{
-                console.log(response.data.data);
-                this.questions = response.data.data.questions;
-                this.roomId = response.data.data.roomId;
+                //解密
+                let resData = JSON.parse(AES.decrypt(response.data.data));
+                console.log(resData);
+                this.questions = resData.questions;
+                this.roomId = resData.roomId;
                 this.timerCountdown();
                 this.isShowItem = true;
             })

+ 3 - 1
src/views/HomeView/postInteract/list.vue

@@ -14,7 +14,9 @@
                                     {{ item.typeName }}
                                 </div> 
                                 <div class="dividing"></div> 
-                                <div class="date">{{ item.createTime }}</div>
+                                <div class="date">
+                                    <el-tag type="danger" effect="plain" size="small">{{ item.deadline }}</el-tag>
+                                </div>
                             </div>
                             <div class="main">
                                 <div class="info-box">

+ 5 - 0
yarn.lock

@@ -2672,6 +2672,11 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3:
     shebang-command "^2.0.0"
     which "^2.0.1"
 
+crypto-js@4.1.1:
+  version "4.1.1"
+  resolved "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
+  integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
+
 css-declaration-sorter@^6.3.1:
   version "6.3.1"
   resolved "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec"