3

我已经在我的站点中实现了 cookie 机制。我想存储的所有 cookie 都在一个数组中,它们的 TTL、值、名称......

当我想设置cookie时,我序列化标签,然后我gzcompress最后我base64_encode

base64_encode(gzcompress(serialize($array)))

我的问题是有时,当我得到 cookie 时

$_COOKIE[name]

base64_encoded 字符串全部为小写字符。

所以我的问题是: - 所有字符都可能是小写格式(base64_encoded)

或者也许我做错了什么,但问题并没有一直出现,我无法重现该错误。

4

1 回答 1

6

是的,Base64 编码的字符串可以全部小写。这种情况发生的概率(对于随机输入数据,压缩数据非常近似)约为 (36 / 64) 4 N / 3,其中N是以字节为单位的输入长度,因此 4 N / 3 是近似值输出的长度(不包括填充)。

碰巧,(36 / 64) 4 ≈ 0.100113 非常接近 1 / 10,因此,一个非常好的近似值,随机 Base64 字符串不包含大写字母的概率每四个下降 10 倍个字符的长度。

因此,例如,一个随机的 8 个字符的 Base64 字符串(对应于一个随机的 6 个字节的输入)有大约 1% 的机会不包含大写字母,而一个随机的 12 个字符的 Base64 字符串(对应于一个随机 9 字节输入)约为 0.1%,依此类推。

于 2012-12-24T15:48:55.753 回答