PHP_EOL换行 与 base64编码

  base64编码包括64个字符:10个数字(0-9),26*2个字母(a-zA-Z),+,/

  其中还有一个第65个字符=作为后缀,没有实际作用。

  来一段代码说明个问题:  

 1 <?php
 2 
 3 $str = '1234567';
 4 
 5 $en = base64_encode($str);// MTIzNDU2Nw==
 6 
 7 $en = 'MTIzND     U 
 8 
 9      2Nw==========';
10 
11 echo base64_decode($en);// 1234567

可以看到,即使修改了base64编码后的内容,中间加空格、换行,后边加一堆=号,仍然可以decode出来原始的字符串。

因为base64编码没有空格、换行的字符,所以不影响。

 

今天写php和java对接一个接口时候,一个base64编码后的字符串,我看了下长度是174个字节,显然不是4的倍数(base64编码的原理决定了一定是4的倍数)。但是仍然可以decode出来。后来发现原来是多出了两个换行符。

如果希望利用4的倍数,比如我这个接口是用到RSA加密的,需要这个172,所以要替换掉换行。

php有个预定义变量PHP_EOL可以搞定

$str = str_replace(PHP_EOL, '', $str);

 

posted @ 2017-02-12 23:05  根号五  阅读(1485)  评论(0编辑  收藏  举报