Mar*_*son 3 sorting hash base64 base32
我有一个十六进制编码的MD5值的大量文件,我正在使用linux'sort'实用程序进行排序.结果是哈希按顺序出现(这是我下一阶段处理所需要的).例如:
000001C35AE83CEFE245D255FFC4CE11
000003E4B110FE637E0B4172B386ACAC
000004AAD0EB3D896B654A960B0111FA
Run Code Online (Sandbox Code Playgroud)
为了加快排序操作(并使文件更小),我正在考虑将数据编码为base32或base64.
问题是,alpha32种base32/64数据会得到相同的结果吗?我的快速测试似乎表明它会起作用.例如,以上三个十六进制字符串对应于这些base64字符串的1:1:
AAABw1roPO/iRdJV/8TOEQ==
AAAD5LEQ/mN+C0Fys4asrA==
AAAEqtDrPYlrZUqWCwER+g==
Run Code Online (Sandbox Code Playgroud)
但是我不确定在Base64中使用的特殊字符(如"/"和"+")的排序顺序以及如何在alpha排序的上下文中处理它们.
注意:我碰巧使用的是Linux排序实用程序,但问题仍然适用于其他alpha排序工具.使用的工具实际上不是问题的一部分.
我已经发现使用标准的base32/64实现是不可能的.然而,存在一个名为" base32hex " 的base32变体,它保留了排序顺序,但没有官方的"base64hex"等价物.
貌似这使得创建一个自定义编码这样.
编辑:事实证明,解决这个问题非常简单.只需在base 64中编码,然后使用符合排序顺序的自定义字符表将字符转换为字符.
只需从标准Mime 64字符映射:
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Run Code Online (Sandbox Code Playgroud)
对于这样的事情:
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz|~"
Run Code Online (Sandbox Code Playgroud)
然后排序将起作用.