其实不应该算AES加密的坑,而是加密后使用的坑
正常的加密应该是
$data = openssl_encrypt($input, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hex_iv); 返回给用户使用还要base64编码,
base64_encode($data)
就是这个编码可能会造成解密错误!是的,是解密会错误!加密没事
原因就是因为:base64编码的过程中会产生+,但是+在浏览器url中会替换成空格,所以最好的做法是
编码后替换+为其他字符
解密之前将+替换回来
如下
/**加密**/ public function encrypt($input) {$data = openssl_encrypt($input, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hex_iv);$data =str_replace('+','|',base64_encode($data));return $data; } /**解密***/ public function decrypt($input) {$data=base64_decode(str_replace('|','+',$input));$decrypted = openssl_decrypt($data,'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hex_iv);return $decrypted; }