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

base64 encoding that doesn't use “+/=” (plus or equals) characters?

我需要对大约1000个字符的字符串进行编码,该字符串可以是任何字节值(00-FF)。 我不想使用十六进制,因为它不够密集。 据我了解,base64的问题在于它包含+ /和=,这是我在应用程序中无法忍受的字符。

有什么建议么?


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

对Base64的基本改进:

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

比特币地址实用程序是一个实现示例;适用于比特币。

注:新颖的事实上的标准可能不足以满足您的需求。尚不清楚Base58Check编码方法是否会在当前协议中正式化。


选择您的替代品。考虑其他一些变体:Wikipedia的base64变体表。

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

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


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


正如Ciaran所说,base64的实现不是很困难-但您可能想看看现有的库,这些库允许您指定要使用的自定义字符集。我很确定那里有很多东西,但是您还没有指定需要该平台的平台。

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


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


当然。为什么不编写自己的Base64编码器/解码器,而在算法中替换那些字符。当然,将无法使用普通的解码器对其进行解码,但是如果这不是问题,那就不用担心了。但是,最好在您的应用中至少有3个其他字符可以用来表示+ /和=的字符。