base64编码不使用“+ / =”(加号或等号)字符?

时间:2010-12-09 07:02:04

标签: encoding base64 decoding

我需要编码一个大约1000个字符的字符串,可以是任何字节值(00-FF)。我不想使用Hex,因为它不够密集。我理解base64的问题是它包含+ /和=这是我在我的应用程序中无法容忍的字符。

有什么建议吗?

7 个答案:

答案 0 :(得分:10)

选择你的替代品。考虑一些其他变体:base64 Variant table from Wikipedia

虽然base64编码器/解码器很简单,但替换替换可以在现有 base64编码/解码函数(内部包装器)的简单的前/后处理步骤中完成 - 无需重新发明轮子(完全)。或者,更好的是,正如Skeet先生指出的那样,找到一个具有足够灵活性的现有图书馆。

如果您没有其他合适的“有趣”字符可供选择(可能所有其他字符都无效,只留下62个字母数字字符可供选择),您始终可以使用转义字符非常轻微(~3 / 64?)的尺寸增加。例如,0(A)将被编码为“AA”,62(+)将被编码为“AB”并且63(/)将被编码为“AC”。如果您不想从头开始编写自己的编码器/解码器,这也可以作为前/后步骤完成。这种方法的缺点是输出字符与输入字节的比率不固定。

答案 1 :(得分:8)

Base58Check是一个选项。它开始成为加密货币地址事实上的标准。

超过Base64的基本改进:

  • 仅限字母数字字符[0-9a-zA-Z]
  • 没有相似的字符:0OIl / 0OIl
  • 没有标点符号来触发文档和电子邮件中的自动换行或换行符
  • 由于没有标点符号,也可以通过一次双击选择整个值。

Bitcoin Address Utility是一个实现示例;面向比特币。

注意:新的事实标准可能不足以满足您的需求。目前还不清楚Base58Check编码方法是否会在current protocols内形式化。

答案 2 :(得分:6)

如果只是那些困扰你的特殊字符,你可以找到其他一些字符来代替,那么如何实现你自己的自定义base64模块呢?这并不是那么困难。

答案 3 :(得分:2)

正如Ciaran所说,base64并不是非常难以实现 - 但您可能希望查看现有的库,这些库允许您指定要使用的自定义字符集。我很确定那里有很多,但你没有指定你需要这个平台。

基本上,你只需要65个ASCII字符 可接受 - 最好除了换行符。

答案 4 :(得分:1)

不确定。为什么不编写自己的Base64编码器/解码器,而是替换算法中的那些字符。当然,它不能用普通的解码器解码,但如果这不是问题,那么为什么要担心它。但是,你最好在你的应用程序中至少有3个 ARE 可用的其他字符代表+ /和= ... ...

答案 5 :(得分:1)

您可以使用Base32代替。密度低于Base64,但完全消除了不需要的字符。

答案 6 :(得分:0)

base62 本质上是 base64,但只是字母数字。