18

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

有什么建议么?

4

7 回答 7

15

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

对 Base64 的基本改进:

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

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

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

于 2013-09-22T23:49:45.737 回答
12

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

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

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

于 2010-12-09T07:30:44.300 回答
6

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

于 2010-12-09T07:07:52.467 回答
2

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

于 2010-12-09T07:40:43.820 回答
1

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

于 2010-12-09T07:09:04.150 回答
1

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

基本上,您只需要 65可接受的 ASCII 字符 - 最好是换行符。

于 2010-12-09T07:10:56.893 回答
0

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

于 2021-03-22T20:37:14.880 回答