Vue项目使用AES做加密
3、utils.js文件中的内容
/**
* 工具类
*/
import Vue from 'vue'
import CryptoJS from 'crypto-js'
export default {//加密
encrypt(word, keyStr){
keyStr = keyStr ? keyStr : 'abcdefgabcdefg12';
var key = CryptoJS.enc.Utf8.parse(keyStr);//Latin1 w8m31+Yy/Nw6thPsMpO5fg==
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();
},
//解密
decrypt(word, keyStr){
keyStr = keyStr ? keyStr : 'abcdefgabcdefg12';
var key = CryptoJS.enc.Utf8.parse(keyStr);//Latin1 w8m31+Yy/Nw6thPsMpO5fg==
var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
}
注:1、一定要在该文件中引用vue和crypto-js。2、两个方法中的第一个参数word是待加密或者解密的字符串,第二个参数keyStr是aes加密需要用到的16位字符串的key。3、如果想对一个js对象加密,需要先把该对象转成json字符串。
4、测试:
在需要使用加密解密方法的vue组件中使用import引入utils.js文件即可使用了
jsencrypt.js加密
项目需求中需要对用户登录时的密码进行加密,在网上查询些许文章后,最终与后端协商使用jsencrypt.js。
jsencrypt.js的github地址: https://github.com/travist/js...
使用yarn安装至Vue项目
yarn add jsencrypt --dep
或者使用npm
npm install jsencrypt --dep
引入jsencrypt
import { JSEncrypt } from 'jsencrypt'
可封装为全局混合,便于调用
公钥为后端提供,如前端需要解密数据,则需要后端提供私钥。此处只封装了加密。
|
1 2 3 4 5 6 7 8 9 10 11 |
|
调用函数加密,此处的公钥是我从后端那获取的,然后加密密码
encryptedPassword = this.encryptedData(publicKey, password);
即完成加密。
更多使用可查阅官方文档 http://travistidwell.com/jsen...
PS:下面看下jsencrypt 配置对密码进行加密(vue)
安装
npm i node-jsencrypt
在script下导入
|
1 2 |
|
引用
一般情况下,后台会给一个获取公钥的接口来进行转换
|
1 2 3 4 5 6 7 8 9 10 11 12 13
14 15 16 |
|
jscrypto-.min.js 加密/解密
首先引入cdn
<!-- 加密文件 -->
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/jscrypto-.min.js"></script>
1
2
在webpack.base.conf.js配置
externals: {
'crypto':'Crypto',
},
在src目录下,建立crypto文件夹,新建index.js文件,写入加密代码
export default {//加密
set(word, keyStr){
keyStr = keyStr ? keyStr : 'abcdefghijklmnop'; //16位的**,自己定义,和下面的**要相同
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();
},
//解密
get(word, keyStr){
keyStr = keyStr ? keyStr : 'abcdefghijklmnop';
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();
}
}
一切就绪后,在你的组件内引入并使用
import Crypto from "@/crypto";
、
、
、
let str = escape(Crypto.set("123456")); //加密 我用了escape进行特殊字符转码
let str2 = Crypto.get(unescape(str)); //解密
base64加密
install
cnpm install js-base64 –save-dev
封装
import { Base64 } from 'js-base64'
// 加盐
let salting = 'admin-authority'
// 加密
const encryptString = (name) => {
return Base64.encode(name + salting)
}
// 解密
const decodeString = (name) => {
let decodeName = Base64.decode(name) || ''
if (decodeName && decodeName.split && decodeName.split(salting) && decodeName.split(salting)[0]) {
return decodeName.split(salting)[0]
} else {
return ''
}
}
export { encryptString, decodeString }
挂载
import { encryptString, decodeString } from '@/utils/encrypt'
Vue.prototype.encryptString = encryptString
Vue.prototype.decodeString = decodeString
应用
let str = '我是待加密的数据'
let enc = this.encryptString(str)
console.log(enc) // 5oiR5piv5b6F5Yqg5a+G55qE5pWw5o2uYWRtaW4tYXV0aG9yaXR5
let dec = this.decodeString(enc)
console.log(dec) // 我是待加密的数据