如何将VB.NET中的AES IV字节数组转换为PHP openssl_encrypt可用格式
IV转换解决方案
PHP的openssl_encrypt函数要求IV参数为16位原始二进制字符串,你可以用以下两种方法生成符合要求的IV:
转换方法
- 方法一:通过十六进制字符串转换(更简洁)
首先把VB.NET中定义的字节按顺序拼接为十六进制字符串db8495bddad5d3f8ce819ca5b38b2454,再用hex2bin函数转为二进制格式即可:
$iv = hex2bin('db8495bddad5d3f8ce819ca5b38b2454');
- 方法二:逐个字节拼接
直接把每个十六进制值用chr函数转为字符后拼接:
$iv = chr(0xDB) . chr(0x84) . chr(0x95) . chr(0xBD) . chr(0xDA) . chr(0xD5) . chr(0xD3) . chr(0xF8) . chr(0xCE) . chr(0x81) . chr(0x9C) . chr(0xA5) . chr(0xB3) . chr(0x8B) . chr(0x24) . chr(0x54);
额外注意事项
- 你提到的加密密钥是十六进制编码字符串,同样需要转为原始二进制才能正常使用,否则会因为长度不符合AES-256要求(32字节)导致加密结果和合作方不一致:
$key = hex2bin('你的十六进制格式密钥');
option参数设为0时,openssl_encrypt会返回base64编码的加密结果,需要确认合作方的VB.NET代码输出格式是否匹配,若对方输出原始二进制,可将option改为OPENSSL_RAW_DATA。- 两边需确认填充规则一致,默认情况下PHP openssl和VB.NET的AES实现都使用PKCS7填充,无需额外调整。
内容的提问来源于stack exchange,提问作者penny
相关产品推荐
相关产品推荐

