0

0

PHP怎么创建对称加密密钥_PHP对称加密密钥创建操作指南【方法】

看不見的法師

看不見的法師

发布时间:2026-02-06 13:36:56

|

793人浏览过

|

来源于php中文网

原创

PHP中生成AES密钥的正确方式是使用random_bytes()生成指定长度的密码学安全随机字节:AES-128需16字节、AES-192需24字节、AES-256需32字节;禁用md5、sha1、rand等非安全方法,避免openssl_random_pseudo_bytes()(已弃用)及硬编码、明文存储等风险操作。

php怎么创建对称加密密钥_php对称加密密钥创建操作指南【方法】

PHP中生成AES密钥的正确方式

PHP本身不提供“创建对称加密密钥”的独立函数,密钥本质是一段随机字节数据。关键不是“创建”,而是**安全地生成指定长度的随机字节**,并确保与所选算法(如AES-128、AES-192、AES-256)严格匹配。

错误做法是用 md5()sha1()rand() 生成,它们不具备密码学安全性或长度不可控。

  • 必须使用 random_bytes() —— PHP 7.0+ 内置的 CSPRNG 函数
  • AES-128 需要 16 字节(random_bytes(16)
  • AES-192 需要 24 字节(random_bytes(24)
  • AES-256 需要 32 字节(random_bytes(32)
  • 生成后建议用 bin2hex()base64_encode() 存储/传输,但解密时必须还原为原始二进制

为什么不能用 openssl\_random\_pseudo\_bytes()?

openssl_random_pseudo_bytes() 在 PHP 7.0+ 已被标记为 deprecated,且其返回值需手动校验 $crypto_strong 参数,容易遗漏导致降级到弱随机源。

它和 random_bytes() 底层都调用系统 CSPRNG(如 Linux 的 /dev/urandom),但 random_bytes() 更直接、无歧义、无需额外判断。

腾讯智影
腾讯智影

腾讯推出的在线智能视频创作平台

下载

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

  • PHP 7.0+ 唯一推荐:直接用 random_bytes($length)
  • 若需兼容 PHP 5.6,可用 openssl_random_pseudo_bytes($length, $crypto_strong),但必须检查 $crypto_strong === true
  • 绝对避免 mt_rand()uniqid()、时间戳拼接等非密码学方法

密钥存储与复用注意事项

密钥一旦生成,必须安全保存——它不是密码,不能由用户记忆或推导;丢失即无法解密数据。

  • 不要硬编码在代码里(如 $key = 'xxx';
  • 不要存入数据库明文字段;如需集中管理,应使用专用密钥管理服务(KMS)或加密后存入受控环境变量
  • 同一密钥可重复用于多条数据加密(前提是使用不同 IV),但长期复用会增加被攻击风险;建议定期轮换
  • 若用 openssl_encrypt(),IV 必须每次随机生成(random_bytes(16) for AES-CBC),且和密文一起保存或传输

常见错误:密钥长度不匹配导致 openssl_encrypt 失败

调用 openssl_encrypt() 时出现 “Failed to encrypt data” 或空返回,大概率是密钥长度与 cipher 不符。例如:

// ❌ 错误:AES-256-CBC 要求 32 字节密钥,这里只给了 16 字节
$key = random_bytes(16);
openssl_encrypt($data, 'AES-256-CBC', $key, 0, $iv);

// ✅ 正确:AES-256-CBC 对应 32 字节
$key = random_bytes(32);
  • 查清 cipher 名称对应的实际密钥长度:用 openssl_get_cipher_methods() 查支持列表,再参考 OpenSSL 文档确认
  • 常见组合:'AES-128-CBC' → 16 字节,'AES-192-CBC' → 24 字节,'AES-256-CBC' → 32 字节
  • 注意:'AES-128-ECB' 等模式同样要求对应长度,ECB 不推荐用于生产
密钥长度和随机性来源这两个点,实际项目中最常被跳过验证,出问题时却最难定位。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

931

2023.09.19

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

428

2023.08.14

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

362

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2087

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

352

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

256

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

327

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

414

2023.10.16

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

29

2026.02.06

热门下载

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

精品课程

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

共137课时 | 11.1万人学习

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号