
PHP7 OpenSSL加密:密钥长度和算法匹配的重要性
本文分析了PHP7中使用openssl_encrypt函数进行AES加密时,密钥长度与加密算法选择不匹配导致加密结果与预期不符的问题。 一个用户使用AES-128-CBC算法和PKCS7填充模式进行加密,密钥和IV长度均为32位,PHP代码报错,而在线加密网站却成功加密。
问题的根源在于密钥长度与选择的AES-128-CBC算法不兼容。AES-128-CBC算法要求密钥长度为16字节(128位),而用户提供的密钥长度为32字节(256位)。 IV长度(最大16字节)并非问题所在。
在线网站的成功加密,可能是因为其对32位密钥进行了特殊处理,或使用了不同的加密算法。将用户密钥截断至16字节后,PHP代码的加密结果与在线网站使用AES-128-CBC算法的结果一致。
立即学习“PHP免费学习笔记(深入)”;
解决方案是将加密算法更改为AES-256-CBC,该算法支持256位(32字节)密钥。 修改后的PHP代码如下:
$str = '123'; $Key = 'AAABBBCCCTTTDDDAAAABBBCCCTTTDDDA'; $Iv = 'AAABBBCCCTTTDDDAAAABBBCCCTTTDDDA'; // option 0 直接输出base64_encode结果 $encryptStr = openssl_encrypt($str, 'aes-256-cbc', $Key, 0, $Iv); var_dump($encryptStr);
即使算法改为AES-256-CBC,与某些在线网站的结果仍可能存在差异。这可能是由于在线网站的实现细节不同,例如填充方式或其他参数设置差异。 因此,确保客户端和服务器端使用完全相同的加密参数配置至关重要。
以上就是PHP7 OpenSSL加密:密钥长度和算法选择如何影响加密结果?的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号