如何在 gnome 终端上将 base64 字符串解码为人类可读的字符

cod*_*ode 2 bash encoding character-encoding gnome-terminal

我想将 base64 编码的字符串解码为人类可读的数据,并为其寻找正确的编码。

这是我正在尝试的命令

echo H4sICJVHi14AA2ZsYWcyLnR4dAAzsvLzdHb193O1Kkktyk3KzLNKLjMp4gIAtRX2oBcAAAA= | base64 -d
Run Code Online (Sandbox Code Playgroud)

Abve 输出到一些模糊的非人类可读数据。

?G?^flag2.txt3???tv??s?*I-?M??J.3)????
Run Code Online (Sandbox Code Playgroud)

为什么会漏掉很多字符?我如何读取所有字符?

我的 gnome 终端设置为 utf-8。有更好/更宽的编码吗?我该如何设置?

Léa*_*ris 7

您的 Base64 编码数据是具有混合可打印字符和混合不可打印字符的二进制数据。

让我们看看它实际上包含什么hexdump

<<<'H4sICJVHi14AA2ZsYWcyLnR4dAAzsvLzdHb193O1Kkktyk3KzLNKLjMp4gIAtRX2oBcAAAA=' base64 -d | hexdump -C
00000000  1f 8b 08 08 95 47 8b 5e  00 03 66 6c 61 67 32 2e  |.....G.^..flag2.|
00000010  74 78 74 00 33 b2 f2 f3  74 76 f5 f7 73 b5 2a 49  |txt.3...tv..s.*I|
00000020  2d ca 4d ca cc b3 4a 2e  33 29 e2 02 00 b5 15 f6  |-.M...J.3)......|
00000030  a0 17 00 00 00                                    |.....|
00000035
Run Code Online (Sandbox Code Playgroud)

您可以使用以下strings命令提取有效文本:

<<<'H4sICJVHi14AA2ZsYWcyLnR4dAAzsvLzdHb193O1Kkktyk3KzLNKLjMp4gIAtRX2oBcAAAA=' base64 -d | strings
flag2.txt
J.3)
Run Code Online (Sandbox Code Playgroud)

或将其保存到 bin 文件中:

<<<'H4sICJVHi14AA2ZsYWcyLnR4dAAzsvLzdHb193O1Kkktyk3KzLNKLjMp4gIAtRX2oBcAAAA=' >file.bin base64 -d
Run Code Online (Sandbox Code Playgroud)

让我们检查一下它是什么:

file file.bin 
file.bin: gzip compressed data, was "flag2.txt", last modified: Mon Apr  6 15:15:33 2020, from Unix, original size modulo 2^32 23
Run Code Online (Sandbox Code Playgroud)

由于它是一个gzip'ed 数据,gunzip让它:

<file.bin gunzip
2:NICEONE:termbin:cv4r
Run Code Online (Sandbox Code Playgroud)

或者在一行中完成所有操作:

<<<'H4sICJVHi14AA2ZsYWcyLnR4dAAzsvLzdHb193O1Kkktyk3KzLNKLjMp4gIAtRX2oBcAAAA=' base64 -d | gunzip
2:NICEONE:termbin:cv4r
Run Code Online (Sandbox Code Playgroud)