最近在做广告服务, 需要跨应用传输数据, 因为都是后台(PHP
Go
), 所以这里选择的是对称加密算法.
容易遇到的错误点
秘钥的长度
- (因为文档中说可以有, 16, 24, 32 长度),就选了一个 32 位的导致错误 AES-128:需要提供 16bytes 的密钥 key AES-192:需要提供 24 bytes 的密钥 key AES-256:需要提供 32bytes 的密钥 key
- 所以需要根据使用的算法, 使用对应的秘钥长度
填充的算法
- 在
PHP
因为使用很简单,所以忽略掉了这个
$text = "要加密的字符串";
// 秘钥的长度需要对应算法类型
$key = "2bfbd593bb32b2b9";
// AES-128-ECB 取决于你要使用何种算法
openssl_encrypt($text, 'AES-128-ECB', $key);
- 如上, 便可很简单的使用
Aes
加密, 不过这个数据其实默认是base64
过后的, 不然用了Go
去写,数据不一致. - 如果想要原始的二进制数据,可以这样
openssl_encrypt($text, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
- 第四个参数也可以自定义使用的填充算法
关于联调
- 不要直接两个服务调试数据
- 而是找一个在线解密加密网站, 然后通过这个网站互相调通再联调