简介
- AES 是一种对称加密,即加密和解密是相同的密钥
- 前端要使用 AES 加密,依赖的是 crypto-js,所以必须先引入
- 本文采用的密钥长度是16位
- AES 加密有base64 和 不是采用base64 两种,加密解密要保持一致
具体使用
- 首先安装AES,
npm i crypto-js --save
- 在项目目录中新建一个 ase.js 文件,目录根据自己的项目建立就行,以下不是采用base64加密
import CryptoJS from 'crypto-js'
export default {//加密
encrypt(word, keyStr){
// 设置一个默认值,如果第二个参数为空采用默认值,不为空则采用新设置的密钥
keyStr = keyStr ? keyStr : 'asdnhgtrfvfdsloi';
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();
},
//解密
decrypt(word, keyStr){
keyStr = keyStr ? keyStr : 'asdnhgtrfvfdsloi';
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 '@/libs/ase.js';
// 第一个参数需要加密或者解密的字符串,第二个参数是加密解密需要的字符
let asde = Crypto.encrypt('12344','asdnhgtrfvfdsloi');
let d = Crypto.decrypt(asde,'asdnhgtrfvfdsloi')
console.log(asde);
console.log(d);
-
使用过程可能遇到的报错
-
一般遇到这个是因为给的加密密文不对,解密解析不了
-
采用base64 加密的写法
import CryptoJS from 'crypto-js/crypto-js'
// 默认的 KEY 与 iv
const KEY = CryptoJS.enc.Utf8.parse("123");//""中与后台一样 密码
const IV = CryptoJS.enc.Utf8.parse();//""中与后台一样
/**
* AES加密 :字符串 key iv 返回base64
*/
export function Encrypt(word, keyStr, ivStr) {
let key = KEY
let iv = IV
if (keyStr) {
key = CryptoJS.enc.Utf8.parse(keyStr);
iv = CryptoJS.enc.Utf8.parse(ivStr);
}
let srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
// iv: iv,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
/**
* AES 解密 :字符串 key iv 返回base64
*
*/
export function Decrypt(word, keyStr, ivStr) {
let key = KEY
let iv = IV
if (keyStr) {
key = CryptoJS.enc.Utf8.parse(keyStr);
iv = CryptoJS.enc.Utf8.parse(ivStr);
}
let base64 = CryptoJS.enc.Base64.parse(word);
let src = CryptoJS.enc.Base64.stringify(base64);
var decrypt = CryptoJS.AES.decrypt(src, key, {
// iv: iv,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
转载:https://www.cnblogs.com/libo0125ok/p/9224121.html
https://www.cnblogs.com/chaoyuehedy/p/9947381.html