我有一些像这样的 16 个字符的十六进制字符串:
B5A43BC5BDCEEFC6
2C7C27F05A488897
1514F4EC47C2EBF6
D91ED66BC999EB64
我想缩短它们并使缩短的字符串仅包含大写字母。
DeflateStream 和 GZipStream 只是增加了长度。
任何人都可以帮我将这 16 个字符的十六进制字符串缩短到 6 个字符或更少吗?
或者,可以将 32 个字符的十六进制字符串缩短为 12 个字符或更少。
我有一些像这样的 16 个字符的十六进制字符串:
B5A43BC5BDCEEFC6
2C7C27F05A488897
1514F4EC47C2EBF6
D91ED66BC999EB64
我想缩短它们并使缩短的字符串仅包含大写字母。
DeflateStream 和 GZipStream 只是增加了长度。
任何人都可以帮我将这 16 个字符的十六进制字符串缩短到 6 个字符或更少吗?
或者,可以将 32 个字符的十六进制字符串缩短为 12 个字符或更少。
除非您的 16 位十六进制字符输入中有一些冗余,否则您所要求的在数学上是不可能的。您可以通过检查输入的熵来证明这一点。
16^16 = 18446744073709551616 ≈ 1.84x10^19 个可能值。
26^6 = 308915776 ≈ 3.09x10^8 个可能的值。
为保证您可以表示16 个十六进制字符中的每一个,您需要14 个大写(或小写)字母。
13 个字符是不够的:
26^13 = 2481152873203736575 ≈ 2.48x10^18 个可能值。
26^14 = 64509974703297150976 ≈ 6.45x10^19 个可能值。
1626^6 = 18480905552168525376 ≈ 1.849x10^19 个可能值。
通过相同的逻辑,将32 个十六进制字符缩短为 12 个或更少的大写(或小写)字符是不可能的。如果没有冗余,您无法保证可以将任意 16 个(或 32 个)十六进制字符缩短为 6 个(或 12 个)大写(或小写)字符。
您可以将十六进制数转换为更高的基数,例如六十进制: