解决OpenSSL在C++/PHP下AES加密结果不一致问题

2022-10-11 21:07:55 242 0
魁首哥

最近公司需要用到AES算法对数据进行加密传输,其中客户端用的是C/C++开发,web端用的是PHP开发。

C/C++这边使用 OpenSSL 库实现AES加密,PHP端则使用自带的 openssl_encrypt 实现AES加密,一开始都挺顺利的,到后面对接时才发现两边加密出来的结果不一致,但两边的密钥与初始向量都是一样的。

解决OpenSSL在C++/PHP下AES加密结果不一致问题

经过反复测试后,发现当明文刚好为16个字节的倍数时,则两边加密出来的密文是一致的。最后上网搜了一下资料,发现OpenSSL进行AES加密时,每次只能加密16个字节,所以明文长度必须是16的整数倍,或者至少大于in长度的最小16倍数,这样才能真正完成加密解密。而如果明文长度不足不是16的倍数,那么最后的几个字节,其实相当于填充 \0 。

既然发现了问题原因,那就好办了,只需要PHP这边在加密前先判断一下明文长度,长度不是16的倍数的,就自动填充 \0 到16的倍数即可。比如长度为15,则填充到16,30则填充到32,以此类推。下面是我的自动填充代码:

  

收藏
分享
海报
0 条评论
242
上一篇:PHP内存耗尽错误分析 下一篇:【7】一天一个VBA函数学习-DateDiff

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码