ThinkPHP如何实现敏感数据的高效加密与解密操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计740个文字,预计阅读时间需要3分钟。
TP6默认不包含内置加密组件,Crypt 类在6.0.0版本中已被移除。继续使用 Crypt::encrypt() 会导致错误:
用 think-helper 做 AES 加解密(推荐方案)
它封装了 OpenSSL,支持 AES-128-CBC / AES-256-CBC,密钥和 IV 自动处理,比手撸更安全、兼容性更好。
- 安装:
composer require topthink/think-helper - 加密时必须传入字符串,不能直接加密数组或对象 —— 否则会静默转成
Array字符串导致解密失败 - 密钥长度必须为 16 或 32 字节(对应 AES-128 / AES-256),用
md5()或hash('sha256', $key)对原始密钥做规整 - 示例:
$encrypted = \think\helper\Str::encrypt('user_token_123', 'my_secret_key_2024');返回的是 base64 编码字符串,可直接存数据库
手动用 openssl_encrypt 要小心 IV 和填充
绕过扩展直接调用 PHP 原生函数看似灵活,但极易出错,尤其在跨环境(如 PHP 7.4 → 8.2)或换服务器时。
本文共计740个文字,预计阅读时间需要3分钟。
TP6默认不包含内置加密组件,Crypt 类在6.0.0版本中已被移除。继续使用 Crypt::encrypt() 会导致错误:
用 think-helper 做 AES 加解密(推荐方案)
它封装了 OpenSSL,支持 AES-128-CBC / AES-256-CBC,密钥和 IV 自动处理,比手撸更安全、兼容性更好。
- 安装:
composer require topthink/think-helper - 加密时必须传入字符串,不能直接加密数组或对象 —— 否则会静默转成
Array字符串导致解密失败 - 密钥长度必须为 16 或 32 字节(对应 AES-128 / AES-256),用
md5()或hash('sha256', $key)对原始密钥做规整 - 示例:
$encrypted = \think\helper\Str::encrypt('user_token_123', 'my_secret_key_2024');返回的是 base64 编码字符串,可直接存数据库
手动用 openssl_encrypt 要小心 IV 和填充
绕过扩展直接调用 PHP 原生函数看似灵活,但极易出错,尤其在跨环境(如 PHP 7.4 → 8.2)或换服务器时。

