我正在编写应用程序的URL后缀:
$url = 'subjects?_d=1';
echo base64_encode($url);
// Outputs
c3ViamVjdHM/X2Q9MQ==
注意'X2'之前的斜杠。
为什么会这样?我认为base64只输出A-Z,0-9和'='作为填充?我已经尝试使用在线base64编码器来检查,似乎base64总是这样做。我不知道它是下划线“_”还是问号“?”或者“=”或许?
答案 0 :(得分:77)
没有。 Base64字母表包括A-Z,a-z,0-9和+
以及/
。
如果您不关心其他应用程序的可移植性,则可以替换它们。
请参阅:http://en.wikipedia.org/wiki/Base64#Variants_summary_table
您可以使用类似的内容来代替使用您自己的符号(将-
和_
替换为您想要的任何内容,只要它不在base64基本字母表中,当然!)。
以下示例将普通base64转换为base64url as specified in RFC 4648:
function base64url_encode($s) {
return str_replace(array('+', '/'), array('-', '_'), base64_encode($s));
}
function base64url_decode($s) {
return base64_decode(str_replace(array('-', '_'), array('+', '/'), $s));
}
答案 1 :(得分:9)
除了上面的所有答案,指出/是预期的base64字母表的一部分,应该注意你在编码字符串中看到/的特殊原因是因为当base64编码ASCII文本时,生成一个/的唯一方法是将一个问号放在可被三整除的位置。
答案 2 :(得分:6)
/
和+
。
答案 3 :(得分:4)
没有什么特别之处。
基础64“字母”或“数字”是A-Z,a-z,0-9加上两个额外字符+(加号)和/(斜线)。
如果需要,您可以稍后使用%2f进行编码。
答案 4 :(得分:3)
A-Z是26个字符。 0-9是10个字符。 =是一个字符。这总共提供了37个字符,比64字符短。
/
是64个字符中的一个。您可以在the wikipedia page上看到完整列表。
答案 5 :(得分:2)
对于base64,有效的字符集是: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /
=用作最后一个字节的填充
微米。
答案 6 :(得分:2)
没有直接关系,上面有足够的人已经很好地回答和解释了解决方案。
但是,有点超出范围。如果您想要可读的基本文字,请尝试查看 Base58 。如果你只想要字母数字字符,那值得考虑。
答案 7 :(得分:0)
希望对您有帮助
public function generate_key($s) {
return str_replace(array('+', '/'), array('-', '_'), base64_encode($s));
}
$randomKey = generate_key(openssl_random_pseudo_bytes(12)); //you can change this number for different length of keys in base64 format
您可以通过以下功能解码以上密钥。只需在此处传递您的加密字符串
function key_decode($s) {
return base64_decode(str_replace(array('-', '_'), array('+', '/'), $s));
}
不需要解码openssl_random_pseudo_bytes(),但是您可以将其用于其他情况,例如解码url ...