概述
base64_encode编码规律分析
字符串长度除以3向上取整乘以4等于编码后的字符串长度
ceil(strlen($string)/3)*4 = strlen(base64_encode($string));
例如base64_encode("abcd") == "YWJjZA==" (2*4=8)
如果字符串长度除以3的余数是0,则编码后没有“=”符号,且如果每相邻3个字符块相同,则编码后相邻4个字符串相同,例如base64_encode("abcabc")=="YWJjYWJj"
如果字符串长度除以3的余数是1,则编码后有两个“=”符号,例如base64_encode("abcd") == "YWJjZA=="
如果字符串长度除以3的余数是2,则编码后有一个“=”符号,例如base64_encode("abcde") == "YWJjZGU="
这些规律是笔者在php源代码中总结出来的,如果感兴趣的话,请耐心听我分析
首先,我们打开实现base64_encode函数的源码文件(php源码/ext/standard/base64.c文件)
我把主要部分代码贴出来
..........................
static const char base64_table[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '