base64编码包括64个字符:10个数字(0-9),26*2个字母(a-zA-Z),+,/
其中还有一个第65个字符=作为后缀,没有实际作用。
来一段代码说明个问题:
<?php $str = '1234567'; $en = base64_encode($str);// MTIzNDU2Nw== $en = 'MTIzND U 2Nw=========='; echo base64_decode($en);//
可以看到,即使修改了base64编码后的内容,中间加空格、换行,后边加一堆=号,仍然可以decode出来原始的字符串。
因为base64编码没有空格、换行的字符,所以不影响。
今天写php和java对接一个接口时候,一个base64编码后的字符串,我看了下长度是174个字节,显然不是4的倍数(base64编码的原理决定了一定是4的倍数)。但是仍然可以decode出来。后来发现原来是多出了两个换行符。
如果希望利用4的倍数,比如我这个接口是用到RSA加密的,需要这个172,所以要替换掉换行。
php有个预定义变量PHP_EOL可以搞定
$str = str_replace(PHP_EOL, '', $str);