发布于2026-07-12 阅读(0)
扫一扫,手机访问

think\facade\Crypt 已废弃,别再用TP6 默认没有内置加解密组件,Crypt 类在 6.0.0 版本里直接被移除了。如果你还在写 Crypt::encrypt(),运行时会报 Class 'think\facade\Crypt' not found。官方推荐的方案是改用 think-helper 扩展,或者直接用原生的 openssl 自己封装。别抱着老文档不放,迁移必踩坑。
think-helper 做 AES 加解密(推荐方案)think-helper 封装了 OpenSSL,支持 AES-128-CBC 和 AES-256-CBC,密钥和 IV 自动处理,比手写要安全也省事得多。安装很简单:composer require topthink/think-helper。不过有几个注意事项:
"Array" 字符串,解密时直接失败。md5() 或 hash('sha256', $key) 对原始密钥做规整,否则长度不对 OpenSSL 会报错。$encrypted = \think\helper\Str::encrypt('user_token_123', 'my_secret_key_2024');返回的是 base64 编码字符串,可以直接存数据库。openssl_encrypt 要小心 IV 和填充绕过扩展直接调 PHP 原生函数,看似灵活,但最容易出错——尤其是在环境切换(PHP 7.4 → 8.2)或迁移服务器时。几个关键点:
$iv . $cipher,解密时再切出来。千万别复用同一个 IV。Crypt 是自动处理好的,自己写很容易漏,解密时返回 false 都不知道错在哪。mcrypt,别搜到老教程直接用 mcrypt_encrypt,运行就报错。openssl_decrypt 返回 false。排查思路很明确:检查 IV 是否匹配、密钥长度对不对、解密时有没有正确截出 IV 段。数据库里存的是密文,那就没法直接用 where('phone', '138****') 来查——因为加密结果每次不同(IV 随机),甚至不能用 LIKE 做模糊查询。这个问题比加密本身更棘手。
phone_hash => id),或者用非对称加密配合索引字段分离——明文存 phone_md5 专门用来查,密文存 phone_enc 用来展示。sa ving / retrieving)可以统一做加解密,但注意不要误操作到非敏感字段,否则性能和无意义解密都是麻烦。加密本身没那么复杂,真正考验人的是:密钥怎么管理、IV 怎么传递、查询怎么设计、升级时怎么平滑迁移。这些地方没想清楚,上线后才发现解不开、查不了、换服务器全乱套——那才是真头疼。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8