例如可以压缩
002e3483bbdc11ddaae0754822a559f6,最多可包含30个字符。
答案 0 :(得分:4)
是的,您可以将其转换为32位数字,因此最大的32个字符十六进制数字即ffffffffffffffffffffffffffffffffff相当于基数为32的80000000000000000000000000只有26个字符,另请注意,在base-32中,您将以仅包含此字符的字符串:123456789ABCDEFGHIJKLMNOPQRSTUV
例如:002e3483bbdc11ddaae0754822a559f6在base-32中是5OQ87EUS27F0000000000000
答案 1 :(得分:1)
如果您的问题是将32个十六进制数字压缩为30个十六进制数字。
对于所有测试用例都不可能发生这种情况,因为如果可能的话,多个32长度的十六进制字符串必须压缩到相同的30长度十六进制字符串,因此您不会知道它是哪一个( the pigeonhole principle)。
证明不足的证据 - 您可以在任何大小的文件上重复调用该过程,以获得单个30长度的十六进制字符串,这没有多大意义。
答案 2 :(得分:0)
将十六进制转换为二进制,然后使用类似 base64 或任何其他编码方案的内容,请参阅 Binary-to-text encoding(维基百科)。这样做的优点是不需要像建议的 base32 解决方案那样使用 128 位算法。
转换为 base64 并返回:
$ echo 002e3483bbdc11ddaae0754822a559f6 |xxd -r -ps |openssl base64 -e |tee >(openssl base64 -d |xxd -ps)
AC40g7vcEd2q4HVIIqVZ9g==
002e3483bbdc11ddaae0754822a559f6
剪切从 |tee
开始的行以仅获取编码输出。在大多数编程语言中,您将拥有核心或外部库来进行十六进制到二进制的转换和 base64 编码。
注意:也可以转换为 base32,但 base32 二进制到文本编码需要 8 字节填充,因此您必须修剪它,然后在解码时重新添加填充 (=
)。>