如何安全传输存储用户密码?  需要借助一款插件,JSEncrypt 前端js加密库

1.下载 JSEncrypt 加密插件并挂载到vue原型上

import JSEncrypt from 'jsencrypt'; //导入

Vue.prototype.$getCode = function(pass, pubkey) { //挂载到vue原型上
  let encryptor = new JSEncrypt();
  encryptor.setPublicKey(pubkey);
  let rsaPassWord = encryptor.encrypt(pass);
  return rsaPassWord;
};

2.调用vue原型上的方法 $getCode ,我这里通过vuex来存用户token

store.dispatch('GetInfo', Vue.prototype.$getCode) //vuex存

 3. 在vuex中的mutations中存GetInfo派发传过来的token,或数据

 GetInfo({ commit, state }, getCode) {
     // 增加组织获取  
      getUserOrgs().then(res => {
        if (res.rel) {
          if (res.data.length > 0) {
            sessionStorage.setItem('USERORGS', JSON.stringify(res.data)); 
            commit('SET_USER_ORGS', res.data);
          }
        } else {
        }
      });
      // 存储用户信息
      getUserDomain().then(res => {
        if (res.data.attr1) {
          const data = res.data.attr1;
          sessionStorage.setItem('USERINFOAttr1', JSON.stringify(data));
        }
      });
    },

扩展:

 分段解密

import { b64tohex} from "jsencrypt/lib/lib/jsbn/base64";

export const decryptLong = (content:string) => {
  const enc = new JSEncrypt({});
  enc.setPrivateKey(LICENSE_KEY);  // 私钥
  let k = enc.getKey();  
  let maxLength = 128;
  try {
    let hexStr = b64tohex(content);
    if (hexStr.length > maxLength * 2) {
      let hexStrArr = hexStr.match(/.{1,256}/g);  // 128位解密。取256位
      const ct = hexStrArr.map(entry => k.decrypt(entry)).join('');
      return ct;
    } else {
      return k.decrypt(hexStr);
    }
  } catch (ex) {
    return false;
  }
};

Logo

前往低代码交流专区

更多推荐