PHP 报错openssl_encrypt(): IV passed is 32 bytes long...
openssl
传输层安全性/安全套接层及其加密库
项目地址:https://gitcode.com/gh_mirrors/ope/openssl
免费下载资源
·
问题
加密算法是aes-128-cbc,调用openssl_encrypt方法加密时报错:
openssl_encrypt():IV passed is 32 bytes long which is longer than the 16
expected by selected cipher
原因
openssl_encrypt使用的加密算法是aes-128-cbc,该算法需要的iv初始化向量长度是16字节,
传入的iv初始化向量长度是32字节,超出预期长度,导致报错
测试其他IV长度
算法是aes-128-cbc,尝试传入13字节或18字节,都会产生报错,如下:
1、openssl_encrypt(): IV passed is only 13 bytes long, cipher expects an IV
of precisely 16 bytes
2、openssl_encrypt(): IV passed is 18 bytes long which is longer than the 16
expected by selected cipher
由此可得,传入的iv长度必须与aes-128-cbc算法要求的长度一致,过长或过短都不行
解决方案
传入的iv长度与aes-128-cbc算法要求的iv长度一致即可,即16字节的iv
如何确定算法要求的iv初始化向量长度?
openssl_cipher_iv_length("aes-128-cbc");
//结果为16,说明aes-128-cbc算法要求的iv长度是16字节
关于aes-128-gcm算法的iv长度
测试发现:
openssl_cipher_iv_length("aes-128-gcm") 得到的结果是12
但是传入的iv过长或过短,都不会产生报错,与aes-cbc算法有差异,不清楚原因
参考文章
PHP openssl_encrypt的错误原因是什么? - 编程乐园
PHP: openssl_encrypt - Manual(参考其中的示例#1 )
GitHub 加速计划 / ope / openssl
25.13 K
9.99 K
下载
传输层安全性/安全套接层及其加密库
最近提交(Master分支:1 个月前 )
fd39d1c8
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/25095)
3 个月前
ae87c488
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/25095)
3 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)