PHP AES 解密的坑
本文链接:
一、AES 加解密(ECB模式)
/** * AES加密 * @return string */ function aes_encrypt(string $aes_key, string $text) { return openssl_encrypt($text, 'AES-128-ECB', $aes_key, 0); } /** * AES解密 * @return string */ function aes_decrypt(string $aes_key, string $encrypt_text) { $encrypt_text = str_replace(' ', '+', $encrypt_text); return openssl_decrypt($encrypt_text, 'AES-128-ECB', $aes_key, 0); }
二、URL传参
异常一:
openssl_decrypt 时报 failed to base64 decode the input
说明:加密后台的字符串如果需要通过URL来传参,有时会出现上述错误
解决办法:用 rawurlencode 对字符串编码(不能使用 urlencode)
异常二:openssl_decrypt 返回 false
说明:aes_encrypt 加密出来的字符串可能会带有 + 号,例如:lSPyKQTWakJkK3eHibq70GDF4zqY+nmLFKpOHfjdB9o=
这本身没啥问题,用 openssl_decrypt 也能解。但是,如果你把这个字符串传到 url 去,再用 $_GET 获取,‘+’ 号会自动变成 ‘ ’,直接解的话,就会返回 false
解决办法:因为aes加密出来的字符串肯定是不会有空格的,这里我们直接替换空格回+就行了,$encrypt_text = str_replace(' ', '+', $encrypt_text);
$encrypt_text = str_replace(' ', '+', rawurldecode($encrypt_text)); openssl_decrypt($encrypt_text, 'AES-128-ECB', $aes_key, 0);
本文链接:
完。