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

Can I alpha sort base32/64 encoded MD5 hashes?

我有一大堆十六进制编码的 MD5 值文件,我正在使用 linux 'sort' 实用程序进行排序。结果是散列按顺序出现(这是我下一阶段处理所需要的)。例如:

000001C35AE83CEFE245D255FFC4CE11 
000003E4B110FE637E0B4172B386ACAC 
000004AAD0EB3D896B654A960B0111FA

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

问题是,base32/64 数据的 alpha 排序是否会得到相同的结果?我的快速测试似乎表明它会起作用。比如上面三个十六进制字符串对应1:1这些base64字符串:

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

但我不确定 Base64 中使用的特殊字符(如“/”和“+”)的排序顺序以及在 alpha 排序的上下文中如何处理这些字符。

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

我后来发现标准 base32/64 实现无法做到这一点。然而,存在一个名为“base32hex”的 base32 变体,它保留排序顺序,但没有官方的“base64hex”等价物。

看起来还需要创建 自定义 编码 like this

编辑: 结果证明这很容易解决。只需以 base 64 编码,然后使用尊重排序顺序的自定义 table 字符将字符转换为字符。

从标准 Mime 64 字符简单映射:

  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

像这样:

  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz|~"

然后排序就可以了。