0

0

PHP加密在ThinkPHP差别_不同版本助手函数用法【介绍】

蓮花仙者

蓮花仙者

发布时间:2026-02-17 15:22:37

|

770人浏览过

|

来源于php中文网

原创

tp5.1起think_encrypt/think_decrypt被移除,改用crypt::encrypt()/decrypt(),基于openssl aes-128-cbc,密钥须16字节,不兼容tp5.0自定义异或加密。

php加密在thinkphp差别_不同版本助手函数用法【介绍】

ThinkPHP 5.1 的 think_encryptthink_decrypt 已被移除

TP5.1 开始,框架不再内置对称加密助手函数。如果你在旧项目里直接调用 think_encrypt,运行会报 Call to undefined function think_encrypt()。这不是配置问题,是函数确实没了——官方把加解密逻辑下沉到 think\helper\Str 和独立的 think\facade\Crypt(需手动引入扩展)。

实际迁移时,推荐改用 Crypt::encrypt() / Crypt::decrypt(),但要注意它默认使用 OpenSSL + AES-128-CBC,密钥长度必须为 16 字节,且不兼容 TP5.0 的 think_encrypt 输出(后者用的是自定义异或+base64,无标准算法标识)。

ThinkPHP 6.x 默认使用 think-crypt 扩展,但需显式安装和配置

TP6 不再把加密能力打包进核心,而是拆成可选组件 topthink/think-crypt。没装这个包,Crypt::encrypt() 会提示类不存在;装了但没发布配置,会因找不到 config/crypt.php 报错。

正确做法是:

立即学习PHP免费学习笔记(深入)”;

Heeyo
Heeyo

Heeyo:AI儿童启蒙陪伴师,风靡于硅谷的儿童AI导师和玩伴

下载
  • 执行 composer require topthink/think-crypt
  • 运行 php think vendor:publish 拉取默认配置
  • 检查 config/crypt.php 中的 key 是否为 16/24/32 字节(对应 AES-128/192/256),不能直接填明文字符串,建议用 bin2hex(random_bytes(16)) 生成
  • 避免把 cipher 改成 desrc4 —— 这些在新版 OpenSSL 中已被废弃,PHP 8.1+ 会直接报 Unsupported cipher

TP5.0 的 think_encrypt 无法与 TP6 的 Crypt::encrypt 互解

两者算法完全不同:TP5.0 是纯 PHP 实现的简单混淆(str_replace + 异或 + base64),没有 IV、无标准填充,密钥当作字符串直接参与运算;TP6 用的是标准 OpenSSL 封装,带随机 IV、PKCS7 填充、HMAC 签名校验。

这意味着:

  • TP5.0 加密的字符串,在 TP6 下调用 Crypt::decrypt() 必然失败,错误通常是 openssl_decrypt(): Decryption failed
  • 反向也不行:TP6 加密结果 base64 解码后是 48 字节以上(含 IV + 密文 + HMAC),而 TP5.0 期望的是固定结构的短字符串
  • 如需兼容老数据,必须保留 TP5.0 的原始加密逻辑单独写解密函数,不能试图“适配”新 Crypt 类

自定义加密函数时,别忽略 openssl_random_pseudo_bytes 的返回值校验

很多手写 AES 加密的示例直接用 openssl_random_pseudo_bytes(16) 生成 IV,但该函数第二个参数是引用布尔值,表示是否强随机。如果系统熵池不足(如某些 Docker 容器或低配 VPS),可能返回弱随机数甚至 false,导致后续 openssl_encryptIV length must be the same as block size

稳妥写法是:

  • random_bytes(16) 替代(PHP 7.0+,强制强随机)
  • 若需兼容 PHP openssl_random_pseudo_bytes 返回值,并 fallback 到更保守的方案(如 uniqid(mt_rand(), true) + hash)
  • 永远把 IV 和密文一起存储或传输,TP6 的 Crypt 自动处理了这点,但自己封装时容易漏掉 IV 导致解密失败

跨版本迁移加密逻辑时,最常被忽略的是密钥编码方式和 IV 传递机制——不是“换个函数就行”,而是要确认整个加解密上下文是否一致。哪怕只差一个字节的密钥或少传 16 字节 IV,结果都是完全不可逆的乱码。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

159

2023.12.25

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

379

2024.04.10

thinkphp性能怎么样
thinkphp性能怎么样

thinkphp 是一款高性能的 php 框架,具备缓存机制、代码优化、并行处理和数据库优化等优势。官方性能测试显示,它每秒可处理超过 10,000 个请求,实际应用中被广泛用于京东商城、携程网等大型网站和企业系统。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

354

2024.04.10

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

481

2023.11.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

553

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

216

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1553

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

640

2023.11.24

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

283

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.9万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号