我正在研究将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
吗?还是我在这里缺少什么?
您的base64字符串包含6个字符和2个填充字符(=
),因此理论上您可以编码6 * 6bits = 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个无关紧要的位。