Почему делает отображение зашифрованной строки в терминале, или нано делают странные символы?

У меня есть зашифрованный файл, который кодируется base64:

U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni
WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB
I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=

и когда я работаю:

cat encryptedfile | openssl enc -d -a

Я получаю набор символов вопросительного знака. Почему это происходит?

1
задан 8 September 2017 в 18:17

2 ответа

Давайте посмотрим то, что 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 (Ώ, например), потому что терминал пытается иметь некоторый смысл данных.

Зашифрованные данные, как ожидают, не будут текстом, таким образом, не будет никакой причины его для засовывания последовательностей байта, разрешенных некоторым кодированием. Это может использовать любую последовательность доступных байтов, и это делает.

3
ответ дан 3 December 2019 в 06:53

закодированная строка base64 состоит только из 64 печатаемых символов,
, например, для MIME base64 A-Z, a-z, 0-9, +, /.

при декодировании строки, Вы получите полный диапазон байта от 0.. 255, который также содержит непечатаемые символы как управляющие символы , которые обнаруживаются как вопросительные знаки.

1
ответ дан 3 December 2019 в 06:53

Другие вопросы по тегам:

Похожие вопросы: