确保base64编码的字符串永远不包含非字母数字字符

时间:2012-05-20 12:23:35

标签: base64

无论如何确保base64编码的字符串永远不包含非字母数字字符?

例如,如果我有一个我编码的长字符串,是否有一些我可以添加或附加到它的字符串,以确保用base64编码时只包含编码字符串中的字母和数字?像这样:

字符串:192.168.1.1

编码:MTkyLjE2OC4xLjE=< - 我想摆脱'等号。

我尝试在字符串的末尾附加}(新字符串现在是192.168.1.1}),这有效(新的编码字符串:MTkyLjE2OC4xLjF9),但有一种方法确保每种组合都有效吗?

这可能吗?

2 个答案:

答案 0 :(得分:1)

这是长度。 =符号是填充,使输出为4个base64字符的倍数。 3个字符转换为4个base64字符,因此您只需要以某种方式使输入字符串长度为3个字符的倍数。在你的情况下:

192.168.1.1 - 11 characters long, base64 ends with =
192.168.1.1$ - 12 characters long, base64 doesn't end with =

选择一个可以轻松删除的填充字符。

另一种方法是从输出中去掉=,然后确保在尝试base64解码之前附加=符号以产生4个字符的倍数...

答案 1 :(得分:1)

你可以rtrim()等于标志,这是大多数人所做的。

但至于你的问题:当string / 3的长度是一个整数时。所以:

$pad = strlen($str) % 3; if($pad) { $str .= str_repeat(' ', $pad); }

但是,是的,解析器会自动将等号重新添加到4的倍数,当你将字符串传回时 - 所以你不需要保留它们。