前些日子搞的,参考了很多的文章,感谢各路大神,所以这里写上自己总结的代码。
1. JS部分
首先加载crypto-js插件,这个自己安装就行了,直接上工具代码
import * as CryptoJS from "crypto-js";
import { EncryptValEnum } from "@/enums/httpEnum";
import md5 from "md5";
/**
* Aes加密
* @param {String | object} str 待加密的字符串
* @returns 加密后的字符串密文,base64编码格式
*/
export function EncryptByAes128(str: string | object) {
const KEY = md5(EncryptValEnum.KEY);
const IV = md5(EncryptValEnum.IV);
const encryptedStr = CryptoJS.AES.encrypt(str, CryptoJS.enc.Utf8.parse(KEY.substring(0, 16)), {
iv: CryptoJS.enc.Utf8.parse(IV.substring(0, 16)),
mode: CryptoJS.mode.CBC
});
return encryptedStr.toString();
}
/**
* Aes解密
* @param {String | object} str 待解密的字符串,必须是base64格式编码的密文
* @returns 返回utf8格式的解码明文
*/
export function DecryptByAes128(str: string | object) {
const KEY = md5(EncryptValEnum.KEY);
const IV = md5(EncryptValEnum.IV);
const DecryptedStr = CryptoJS.AES.decrypt(str, CryptoJS.enc.Utf8.parse(KEY.substring(0, 16)), {
iv: CryptoJS.enc.Utf8.parse(IV.substring(0, 16)),
mode: CryptoJS.mode.CBC
});
return DecryptedStr.toString(CryptoJS.enc.Utf8);
}
二、PHP部分
使用openssl,记得要打开这个扩展,php7以上,7以内的自己网上搜
if (!function_exists('encryptByAes128')) {
function encryptByAes128($data)
{
$key = substr(md5(config('aes128.key')), 0, 16);
$iv = substr(md5(config('aes128.iv')), 0, 16);
$encrypted = openssl_encrypt($data, "AES-128-CBC", $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($encrypted);
}
}
if (!function_exists("decryptByAes128")) {
/**
* @param string $string
* @param string $mode 具体见 openssl_get_cipher_methods()
* @param int $len
* @return string
* @@author crablovery QQ/VX:503270743
*/
function decryptByAes128($string, $mode = 'AES-128-CBC', $len = 32)
{
if (!$string) return '';
$key = substr(md5(config('aes128.key')), 0, $len);
$iv = substr(md5(config('aes128.iv')), 0, $len / 2);
$data = openssl_decrypt($string, strtolower($mode), $key, 0, $iv);
return trim($data);
}
}