PHP7中openssl_encrypt加密:32位Key和IV长度导致错误如何解决?

霞舞
发布: 2025-03-01 15:28:01
原创
434人浏览过

php7中openssl_encrypt加密:32位key和iv长度导致错误如何解决?

PHP7中使用openssl_encrypt加密时密钥和IV长度问题详解

本文分析在PHP7中使用openssl_encrypt函数进行AES加密时,由于密钥(Key)和初始化向量(IV)长度不匹配导致的错误。 问题源于用户尝试使用32位长度的密钥和IV进行AES-128-CBC加密,导致代码报错,而在线加密工具却能成功加密。

问题代码:

<?php
$str = '123';
$key = 'aaabbbccctttdddaaaabbbccctttddda';
$iv = 'aaabbbccctttdddaaaabbbccctttddda';
$encryptstr = openssl_encrypt($str, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);
$encryptstr = base64_encode($encryptstr);
var_dump($encryptstr);
?>
登录后复制

这段代码使用AES-128-CBC加密模式和PKCS7填充,但密钥和IV长度均为32个字符(256位),而AES-128-CBC要求密钥长度为16个字符(128位)。 这导致openssl_encrypt函数报错。

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

问题根源:

度加剪辑
度加剪辑

度加剪辑(原度咔剪辑),百度旗下AI创作工具

度加剪辑 63
查看详情 度加剪辑

关键在于密钥长度。AES-128-CBC算法只能处理128位密钥,而提供的密钥是256位。 IV长度通常为16字节(128位),这并非问题的直接原因。

解决方案:

将加密算法更改为AES-256-CBC,以匹配256位密钥长度。

修改后的代码:

<?php
$str = '123';
$key = 'AAABBBCCCTTTDDDAAAABBBCCCTTTDDDA';
$iv = 'AAABBBCCCTTTDDDAAAABBBCCCTTTDDDA';
$encryptStr = openssl_encrypt($str, 'aes-256-cbc', $key, 0, $iv); // 去除OPENSSL_RAW_DATA,直接使用base64编码
var_dump($encryptStr);
?>
登录后复制

修改后的代码使用AES-256-CBC算法,可以正确处理256位密钥,从而得到与某些在线加密工具一致的加密结果。 需要注意的是,这里去掉了OPENSSL_RAW_DATA选项,让openssl_encrypt函数直接返回base64编码的结果。 在线工具的结果可能因为其他处理而略有不同,但这并非PHP代码本身的问题。 即使在线工具选择256位加密,结果也可能与修改后的代码略有差异,这可能是由于在线工具的实现细节不同造成的。

以上就是PHP7中openssl_encrypt加密:32位Key和IV长度导致错误如何解决?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

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

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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