叙述:
- 前端的两种加密方案,一种是可逆的加密算法,另一种是不可逆的加密算法,
DES
与AES
是可逆的,因此可以通过密钥进行加密和解密,MD5
是不可逆的,只能通过再次加密才能判断明文是否相同。
1. MD5前端加密(不可逆)
npm install --save js-md5
- 在
main.js
中引入,并挂载到Vue的prototype
上
import md5 from 'js-md5';
Vue.prototype.$md5 = md5;
this.login({
username: that.formLogin.username,
password: that.$md5(that.formLogin.password),
captcha: that.formLogin.captcha,
captchaKey: that.captchaKey
})
2. AES/DES加密解密
npm install crypto-js
import CryptoJS from 'crypto-js';
export const generatekey=(num)=> {
let library = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let key = "";
for (var i = 0; i < num; i++) {
let randomPoz = Math.floor(Math.random() * library.length);
key += library.substring(randomPoz, randomPoz + 1);
}
return key;
}
export const encrypt=(word, keyStr)=> {
keyStr = keyStr ? keyStr : 'XXXXXXXXXXXXX';
var key = CryptoJS.enc.Utf8.parse(keyStr);
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
return encrypted.toString();
}
export const listdecrypt=(word, keyStr)=>{
keyStr = keyStr ? keyStr : 'XXXXXXXXXXXXX';
var key = CryptoJS.enc.Utf8.parse(keyStr);
var decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
addAES() {
const aseKey = "12345678";
const message = "2836879147@qq.com";
this.password = encrypt(message,aseKey);
console.log(this.password);
},
addAESJIEmi() {
const aseKey = "12345678";
const data = listdecrypt(this.password,aseKey);
console.log(data);
},