为什么在终端或nano中显示加密字符串会产生奇怪的符号?

为什么在终端或nano中显示加密字符串会产生奇怪的符号?

我有一个用 base64 编码的加密文件:

U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni
WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB
I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=

当我跑步时:

cat encryptedfile | openssl enc -d -a

我得到了一堆问号符号。为什么会这样?

答案1

让我们看看file您的数据说明了什么:

$ base64 -d <<EOF | file - 
U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni
WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB
I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=
EOF
/dev/stdin: openssl enc'd data with salted password

所以,使用 base64 解码后,您将获得加密数据。现在od -c

$ base64 -d <<EOF | od -c 
U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni
WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB
I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=
EOF
0000000   S   a   l   t   e   d   _   _   a 241   . 303   A   ! 304   D
0000020 211 023 315   = 307 247 264   T 022   3  \0 207 245 003   8 376
0000040 230 215 020 177   ]  \a 262 355   2 250 311   "   b   e   9 342
0000060   Y 260 237   $ 270   b 204 300 375  \n   J   ! 006   { 353   c
0000100 305 001 222 035 235   n   -   J 352 024   * 177 305 375 020 321
0000120 205   5   e   1 252   h   X   0   o 226 254 033 017 302 032   A
0000140   #   Z 224 267 335   H   *   S 322 325 203 031 321   @ 362 006
0000160   ' 203 300   \ 252 026   - 342 314   h   j   ^ 203 256 316 217
0000200

显然,并非所有这些字节都是我们常用编码(ASCII 或 UTF-8)中的文本。终端无法理解大多数字节,并将它们显示为问号。其中一些显示为 ASCII 文本,一些显示为 Unicode 图表中较高位置的符号(Ώ例如),因为终端试图理解数据。

加密数据不应为文本,因此它没有理由坚持某些编码允许的字节序列。它可以使用任何可用的字节序列,而且它确实这样做了。

答案2

Abase64编码字符串仅由 64 个可打印字符组成,
例如 MIME base64 A-Za-z0-9+/

如果你解码该字符串,你将获得从 0 到 255 的完整字节范围,其中还包含不可打印的字符,例如控制字符显示为问号。

相关内容