首页 > 解决方案 > 将 Base64 转换为 Hex 混淆

问题描述

我正在研究将base64转换为十六进制的问题,问题提示以示例为例:

3q2+7w==应该产生deadbeef

但是,如果我手动执行此操作,则使用 base64 数字集ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/我会得到:

3 110111
q 101010
2 110110
+ 111110
7 111011
w 110000

作为二进制字符串:

110111 101010 110110 111110 111011 110000

分成四组:

1101 1110 1010 1101 1011 1110 1110 1111 0000

十六进制

d e a d b e e f 0

所以不应该deadbeef0和不应该deadbeef吗?或者我在这里错过了什么?

标签: base64hexbase

解决方案


Base64 用于编码字节(8 位)。

您的 base64 字符串有 6 个字符加上 2 个填充字符 ( =),因此理论上您可以编码 6*6bits = 36 位,这将等于 9 个 4bit 十六进制数。但实际上你必须以字节为单位思考,然后你只有 4 个字节(32 位)的重要信息。必须忽略剩余的 4 位(额外的“0”)。

您可以将无意义的位数计算为:

y : insignificant bits
x : number of base64 characters (without padding)

y = (x*6) mod 8

所以在你的情况下:

y = (6*6) mod 8 = 4

因此,您需要忽略最后的 4 个微不足道的位。


推荐阅读