在 *nix 上十六进制到 base64

Ken*_*war 1 unix encoding base64

注意:我已将此问题标记为另一个问题的副本。但我仍然保留它,因为它有一个例子和一个明确解释的答案,所以希望它可以帮助其他人。

-- 我需要将一串十六进制字符转换为 base64,就像这个在线转换器在 *nix 中所做的那样。

对于“ 5C78336D77D8DF448007D277DAD5C569”(十六进制),我知道预期的输出是“ XHgzbXfY30SAB9J32tXFaQ==”(base64)。

但是当我尝试将其转换为二进制然后 base64 时,我得到了这个:

[kent@server SrcFiles]$ echo "5C78336D77D8DF448007D277DAD5C569" | xxd -b
0000000: 00110101 01000011 00110111 00111000 00110011 00110011  5C7833
0000006: 00110110 01000100 00110111 00110111 01000100 00111000  6D77D8
000000c: 01000100 01000110 00110100 00110100 00111000 00110000  DF4480
0000012: 00110000 00110111 01000100 00110010 00110111 00110111  07D277
0000018: 01000100 01000001 01000100 00110101 01000011 00110101  DAD5C5
000001e: 00110110 00111001 00001010                             69.
[kent@server SrcFiles]$ echo "001101010100001100110111001110000011001100110011001101100100010000110111001101110100010000111000010001000100011000110100001101000011100000110000001100000011011101000100001100100011011100110111010001000100000101000100001101010100001100110101001101100011100100001010" | base64
MDAxMTAxMDEwMTAwMDAxMTAwMTEwMTExMDAxMTEwMDAwMDExMDAxMTAwMTEwMDExMDAxMTAxMTAw
MTAwMDEwMDAwMTEwMTExMDAxMTAxMTEwMTAwMDEwMDAwMTExMDAwMDEwMDAxMDAwMTAwMDExMDAw
MTEwMTAwMDAxMTAxMDAwMDExMTAwMDAwMTEwMDAwMDAxMTAwMDAwMDExMDExMTAxMDAwMTAwMDAx
MTAwMTAwMDExMDExMTAwMTEwMTExMDEwMDAxMDAwMTAwMDAwMTAxMDAwMTAwMDAxMTAxMDEwMTAw
MDAxMTAwMTEwMTAxMDAxMTAxMTAwMDExMTAwMTAwMDAxMDEwCg==
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出我正确的方向吗?

Lev*_*ans 7

如果要用于xxd解码十六进制字符串,则需要使用xxd -r -p. 因此,你得到:

echo "5c78336d77d8df448007d277dad5c569" | xxd -r -p | base64
XHgzbXfY30SAB9J32tXFaQ==
Run Code Online (Sandbox Code Playgroud)

-r用于反向,因此xxd将解码您的十六进制转储,-p也就是说输入是一个普通的转储(即,未经修饰的十六进制字符串),没有诸如行号之类的格式。