首页 资源列表 文章列表

uniapp vue3 配合thinkphp8 使用AES加密和解密

前端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;