heyang 2 年之前
父节点
当前提交
0b724c4143
共有 4 个文件被更改,包括 72 次插入9 次删除
  1. 4 3
      package.json
  2. 46 0
      src/utils/secret.js
  3. 15 0
      src/views/comprehensive/system/publicConfig/exploitConfig.vue
  4. 7 6
      src/views/login.vue

+ 4 - 3
package.json

@@ -82,6 +82,7 @@
     "babel-eslint": "10.1.0",
     "chalk": "4.1.0",
     "connect": "3.6.6",
+    "crypto-js": "^4.1.1",
     "eslint": "7.15.0",
     "eslint-plugin-vue": "7.2.0",
     "lint-staged": "10.5.3",
@@ -89,10 +90,10 @@
     "sass": "1.39.0",
     "sass-loader": "10.1.0",
     "script-ext-html-webpack-plugin": "2.1.5",
-    "svg-sprite-loader": "5.1.1",
-    "vue-template-compiler": "2.6.12",
     "spark-md5": "^3.0.1",
-    "vue-simple-uploader": "^0.7.6"
+    "svg-sprite-loader": "5.1.1",
+    "vue-simple-uploader": "^0.7.6",
+    "vue-template-compiler": "2.6.12"
   },
   "engines": {
     "node": ">=8.9",

+ 46 - 0
src/utils/secret.js

@@ -0,0 +1,46 @@
+//引入crypto-js
+const CryptoJS = require('crypto-js');
+
+//十六位十六进制数作为密钥(秘钥为随机生成,必须与后端保持一致!)
+const key = CryptoJS.enc.Utf8.parse("J4ny0Ja678Y7P2so");
+//十六位十六进制数作为密钥偏移量(秘钥为随机生成,必须与后端保持一致!)
+const iv = CryptoJS.enc.Utf8.parse('pTNorfvZW2UZJbd0');
+
+//解密方法
+function Decrypt(word) {
+  // 先将 Base64 还原一下, 因为加密的时候做了一些字符的替换
+  const restoreBase64 = word.replace(/\-/g,'+').replace(/_/g,'/');
+  // 这里 mode, padding, iv 一定要跟加密的时候完全一样
+  // 返回的是一个解密后的对象
+  let decrypt = CryptoJS.AES.decrypt(restoreBase64, key, {
+    iv: iv,
+    mode: CryptoJS.mode.CBC,
+    padding: CryptoJS.pad.Pkcs7
+  });
+  // 将解密对象转换成 UTF8 的字符串
+  let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
+  // 返回解密结果
+  return decryptedStr.toString();
+}
+
+//加密方法
+function Encrypt(word) {
+  let srcs = CryptoJS.enc.Utf8.parse(word);
+  /**
+   * CipherOption, 加密的一些选项:
+   *   mode: 加密模式, 可取值(CBC, CFB, CTR, CTRGladman, OFB, ECB), 都在 CryptoJS.mode 对象下
+   *   padding: 填充方式, 可取值(Pkcs7, AnsiX923, Iso10126, Iso97971, ZeroPadding, NoPadding), 都在 CryptoJS.pad 对象下
+   *   iv: 偏移量, mode === ECB 时, 不需要 iv
+   * 	返回的是一个加密对象
+   */
+  let encrypted = CryptoJS.AES.encrypt(srcs, key,
+    {
+      iv: iv,
+      mode: CryptoJS.mode.CBC,
+      padding: CryptoJS.pad.Pkcs7
+    });
+  //将结果进行base64加密
+  return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
+}
+
+export {Decrypt , Encrypt}

+ 15 - 0
src/views/comprehensive/system/publicConfig/exploitConfig.vue

@@ -170,6 +170,7 @@
   import { getToken } from "@/utils/auth";
   import { addUrlConfig, getLogoInfo, getUrlConfig } from '@/api/system/publicConfig'
   import store from '@/store'
+  import { Encrypt,Decrypt} from '@/utils/secret.js'
   export default {
     name: "publicConfig",
     data() {
@@ -202,6 +203,13 @@
         let _this = this;
         this.$refs["form"].validate(valid => {
           if (valid) {
+            _this.form.mqttExtranetUrl=Encrypt(_this.form.mqttExtranetUrl)
+            _this.form.mqttExtranetUser=Encrypt(_this.form.mqttExtranetUser)
+            _this.form.mqttExtranetPassword=Encrypt(_this.form.mqttExtranetPassword)
+
+            _this.form.mqttIntranetUrl=Encrypt(_this.form.mqttIntranetUrl)
+            _this.form.mqttIntranetUser=Encrypt(_this.form.mqttIntranetUser)
+            _this.form.mqttIntranetPassword=Encrypt(_this.form.mqttIntranetPassword)
             addUrlConfig(_this.form).then(response => {
               _this.msgSuccess(response.msg);
               _this.getUrlConfig()
@@ -215,6 +223,13 @@
         let _this=this;
         getUrlConfig().then(response => {
             _this.form=response.data
+          _this.form.mqttExtranetUrl=Decrypt(_this.form.mqttExtranetUrl)
+          _this.form.mqttExtranetUser=Decrypt(_this.form.mqttExtranetUser)
+          _this.form.mqttExtranetPassword=Decrypt(_this.form.mqttExtranetPassword)
+
+          _this.form.mqttIntranetUrl=Decrypt(_this.form.mqttIntranetUrl)
+          _this.form.mqttIntranetUser=Decrypt(_this.form.mqttIntranetUser)
+          _this.form.mqttIntranetPassword=Decrypt(_this.form.mqttIntranetPassword)
         });
       },
     },

+ 7 - 6
src/views/login.vue

@@ -56,6 +56,7 @@ import Cookies from "js-cookie";
 import { encrypt, decrypt } from '@/utils/jsencrypt'
 import store from '@/store'
 import { getLogoInfo,getUrlConfig} from "@/api/system/publicConfig";
+import { Encrypt,Decrypt} from '@/utils/secret.js'
 
 export default {
   name: "Login",
@@ -149,11 +150,11 @@ export default {
           //摄像头访问地址
           localStorage.setItem('cameraUrl','wss://'+response.data.cameraExtranetUrl)
           //MQTT地址
-          localStorage.setItem('mqttUrl','wss://'+response.data.mqttExtranetUrl)
+          localStorage.setItem('mqttUrl','wss://'+Decrypt(response.data.mqttExtranetUrl))
           //MQTT账号
-          localStorage.setItem('mqttUser',response.data.mqttExtranetUser)
+          localStorage.setItem('mqttUser',Decrypt(response.data.mqttExtranetUser))
           //MQTT密码
-          localStorage.setItem('mqttPassword',response.data.mqttExtranetPassword)
+          localStorage.setItem('mqttPassword',Decrypt(response.data.mqttExtranetPassword))
           //可视化大屏访问地址
           localStorage.setItem('screenUrl',urlText+response.data.screenExtranetUrl)
         }else if(urlText=='http://'){
@@ -166,11 +167,11 @@ export default {
           //摄像头访问地址
           localStorage.setItem('cameraUrl','wss://'+response.data.cameraIntranetUrl)
           //MQTT地址
-          localStorage.setItem('mqttUrl','ws://'+response.data.mqttIntranetUrl)
+          localStorage.setItem('mqttUrl','ws://'+Decrypt(response.data.mqttIntranetUrl))
           //MQTT账号
-          localStorage.setItem('mqttUser',response.data.mqttIntranetUser)
+          localStorage.setItem('mqttUser',Decrypt(response.data.mqttIntranetUser))
           //MQTT密码
-          localStorage.setItem('mqttPassword',response.data.mqttIntranetPassword)
+          localStorage.setItem('mqttPassword',Decrypt(response.data.mqttIntranetPassword))
           //可视化大屏访问地址
           localStorage.setItem('screenUrl',urlText+response.data.screenIntranetUrl)
         }