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 个无关紧要的位需要忽略。
我正在处理将 base64 转换为十六进制的问题,问题提示作为示例说:
3q2+7w==
should producedeadbeef
但如果我手动执行此操作,使用 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 个无关紧要的位需要忽略。