我可以对base32 / 64编码的MD5哈希进行alpha分类吗?

时间:2016-05-26 20:31:26

标签: sorting hash base64 base32

我有一个巨大的十六进制编码MD5值文件,我使用linux' sort'实用程序来排序。结果是哈希按顺序出现(这是我下一阶段处理所需要的)。 E.g:

000001C35AE83CEFE245D255FFC4CE11 
000003E4B110FE637E0B4172B386ACAC 
000004AAD0EB3D896B654A960B0111FA

为了加快排序操作(并使文件变小),我正在考虑将数据编码为base32或base64。

问题是,alpha32类型的base32 / 64数据会得到相同的结果吗?我的快速测试似乎表明它会起作用。例如,以上三个十六进制字符串对应于这些base64字符串的1:1:

AAABw1roPO/iRdJV/8TOEQ==
AAAD5LEQ/mN+C0Fys4asrA==
AAAEqtDrPYlrZUqWCwER+g==

但我不确定在Base64中使用的特殊字符的排序顺序,如" /"和" +"以及如何在alpha排序的背景下对待它们。

注意:我碰巧使用的是linux排序实用程序,但问题仍然适用于其他alpha排序工具。使用的工具实际上不是问题的一部分。

1 个答案:

答案 0 :(得分:5)

我发现这对于标准的base32 / 64实现是不可能的。然而,存在一个名为“base32hex”的base32变体,它保留了排序顺序,但没有官方的“base64hex”等价物。

看起来这样就创建了自定义编码like this

修改: 事实证明,解决这个问题非常简单。只需在base 64中编码,然后使用符合排序顺序的自定义字符表将字符转换为字符。

只需从标准的Mime 64字符映射:

  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

对于这样的事情:

  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz|~"

然后排序将起作用。