后端 Laravel
php
复制代码
public function encrypt($data, $method = 'AES-128-CBC', $passwd = 'jiami123456789', $options = 0, $iv = 'jiami12345678900')
{
return openssl_encrypt($data, $method, $passwd, $options, $iv);
}
public function decrypt($data, $method = 'AES-128-CBC', $passwd = 'jiami123456789', $options = 0, $iv = 'jiami12345678900')
{
return openssl_decrypt($data, $method, $passwd, $options, $iv);
}
使用
php
复制代码
public function index(Request $request)
{
// 字符串加密
$d['string_encryption'] = $this->encrypt('hello');
$d['string'] = $this->decrypt($d['string_encryption']);
// 数组加密
$data = [
'name' => 'kay',
'age' => 20,
];
$d['array_encryption'] = $this->encrypt(json_encode($data));
$d['array_decryption'] = $this->decrypt($d['array_encryption']);
return $d;
}
UniApp 实现
javascript
复制代码
npm install crypto-js
javascript
复制代码
// /static/crypto.js
/**
* 工具类
*/
import Vue from 'vue'
import CryptoJS from 'crypto-js'
// 确保密钥长度至少为16字节(AES-128要求)
let keyStr = "jiami12345678900";
let ivStr = "jiami12345678900";
//加密
export function aes_encrypt(word) {
try {
var key = CryptoJS.enc.Utf8.parse(keyStr);
var iv = CryptoJS.enc.Utf8.parse(ivStr);
var encrypted = CryptoJS.AES.encrypt(word, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
} catch (error) {
console.error('加密失败:', error);
throw error;
}
}
//解密
export function aes_decrypt(word) {
try {
var key = CryptoJS.enc.Utf8.parse(keyStr);
var iv = CryptoJS.enc.Utf8.parse(ivStr);
// 完整处理base64格式,替换特殊字符
var restoreBase64=word.replace(/[\r\n]/g,'');
var decrypt = CryptoJS.AES.decrypt(restoreBase64, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
} catch (error) {
console.error('解密失败:', error);
throw error;
}
}
使用
javascript
复制代码
import { aes_encrypt, aes_decrypt } from '@/static/crypto.js'
javascript
复制代码
let encrypt = aes_encrypt('hello')
console.log('===加密===', encrypt);
var decrypt = aes_decrypt(encrypt)
console.log('===解密===', decrypt);