如何用PHP实现AES加密生成可被指定Go函数解密的密文
PHP生成符合Go AES解密要求的密文解决方案
问题原因
现有Go侧解密逻辑使用AES-128-ECB模式,无自动填充处理,要求输入密文为hex编码格式。你使用的默认PHP加密代码存在两个不匹配的点:
- 默认返回base64编码的密文,而非要求的hex格式
- 默认开启PKCS7自动填充,哪怕明文刚好等于AES块大小(16字节)也会额外追加16字节填充,导致加密结果和预期不符
正确实现代码
// 测试用明文、密钥和参数保持一致 $plaintext = '-This is secret-'; $key = '1234567890123456'; // 加密配置:禁用自动填充,返回原始二进制密文 $rawCipher = openssl_encrypt( $plaintext, 'AES-128-ECB', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, '' // ECB模式无需IV,传空字符串即可 ); // 二进制密文转十六进制,即符合要求的密文 $hexCipher = bin2hex($rawCipher); // 输出结果为 55c6ca0c634fb5cc7d7a287d30285f09,和你给出的预期值完全匹配 echo $hexCipher;
注意事项
- 如果后续需要加密的明文长度不是16字节的整数倍,需要在PHP侧手动实现和Go侧对齐的填充逻辑(如PKCS7填充),当前Go侧的解密代码没有处理填充逻辑,仅支持解密长度为16字节整数倍的密文
- ECB模式安全性较低,若可调整Go侧代码,建议替换为带IV的CBC模式或者支持鉴权的GCM模式,安全性更高
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

