Base64转Hex混淆

Converting Base64 to Hex confusion

我正在处理将 base64 转换为十六进制的问题,问题提示作为示例说:

3q2+7w== should produce 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 吗?或者我在这里遗漏了什么?

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

你的 base64 字符串有 6 个字符加上 2 个填充字符 (=),所以理论上你可以编码 6*6 位 = 36 位,这等于 9 个 4 位十六进制数。但实际上你必须以字节为单位思考,然后你只有 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 个无关紧要的位需要忽略。