前端uniapp vue3.0框架
uniapp下载安装crypto.js
npm install crypto-js@^3.3.0
uniapp文件夹utils下面新建文件crypto.js
//一般向量是需要随机的生成的但是为了方便我这边直接用了一个自定义的
import CryptoJS from 'crypto-js';
const crypt_key = 'i4ua32wx6mqmyc9n'; //密钥,需要和后端保持一致长度为16位
const crypt_iv = 'o3y8xto2nzfjng1d'; //偏移向量,需要和后端保持一致长度为16位
export default {
//加密
myencrypt(str) {
let aes_key = CryptoJS.enc.Utf8.parse(crypt_key);
// 将iv解析为字节
let new_iv = CryptoJS.enc.Utf8.parse(crypt_iv);
// AES加密 CBC模式 ZeroPadding
let encrypted = CryptoJS.AES.encrypt(str, aes_key, {
iv: new_iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
// 返回字符串
return encrypted.toString();
},
//解密
mydecrypt(str) {
let aes_key = CryptoJS.enc.Utf8.parse(crypt_key);
let aes_iv = CryptoJS.enc.Utf8.parse(crypt_iv);
// 将数据编码成Base64格式
let baseResult = CryptoJS.enc.Base64.parse(str);
let ciphertext = CryptoJS.enc.Base64.stringify(baseResult);
// AES解密 CBC模式 ZeroPadding
let decryptResult = CryptoJS.AES.decrypt(ciphertext, aes_key, {
iv: aes_iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
// 返回字符串
let resData = decryptResult.toString(CryptoJS.enc.Utf8).toString();
return resData;
}
}
vue页面使用
import cryptoUtil from '@/utils/crypto.js';
let params= {
id: '1',
mobile:'18888888888'
};
waitEncryotStr = JSON.stringify(waitEncryotStr);
const cryptoStr = cryptoUtil.myencrypt(waitEncryotStr);
console.log('加密', cryptoStr);
const decryptStr = cryptoUtil.mydecrypt( cryptoStr );
console.log('解密', JSON.parse(decryptStr));
thinkphp端使用
//解密
private function mydecrypt($data,$key='i4ua32wx6mqmyc9n', $iv='o3y8xto2nzfjng1d'){
$encrypted = base64_decode($data);
return openssl_decrypt($encrypted, "AES-128-CBC", $key, true, $iv);
}
//加密
private function myencrypt($data, $key='i4ua32wx6mqmyc9n', $iv='o3y8xto2nzfjng1d'){
$encrypted = openssl_encrypt($data, "AES-128-CBC", $key, true, $iv);
return base64_encode($encrypted);
}
PHP方法调用
$ms = $this->request['params'];
$msj= $this->mydecrypt($ms);
var_dump($msj);die;