后台编辑器加密、解密,前台解密
function my_aes_encode($str, $key, $method)
{
if ($str === '') return ''; // 空内容直接返回,不加密
$iv = random_bytes(openssl_cipher_iv_length($method));
$enc = openssl_encrypt($str, $method, $key, OPENSSL_RAW_DATA, $iv);
// iv + 密文,base64存储
return base64_encode($iv . $enc);
}
// AES解密函数
function my_aes_decode($cipher, $key, $method)
{
if (empty($cipher)) return '';
$data = base64_decode($cipher);
if ($data === false) return $cipher; // base64解析失败,原样返回兼容旧明文
$ivLen = openssl_cipher_iv_length($method);
if (strlen($data) <= $ivLen) return $cipher;
$iv = substr($data, 0, $ivLen);
$c = substr($data, $ivLen);
$plain = openssl_decrypt($c, $method, $key, OPENSSL_RAW_DATA, $iv);
return $plain === false ? $cipher : $plain;
}
// 保存前加密
\Phpcmf\Hooks::app_on('news', 'module_content_before', function ($data) use ($aesKey, $aesMethod) {
$field = 'content';
// 只处理非空内容
if (isset($data[0][$field])) {
$data[0][$field] = my_aes_encode($data[0][$field], $aesKey, $aesMethod);
}
return dr_return_data(1, '', $data);
});
config/hook.php 加密实现了,数据库也是加密的密文,在后台编辑时怎么解密。还有在前台怎么解密