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

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

U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=

, и когда я запускаю:

cat encryptedfile | openssl enc -d -a

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

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

6 ответов

Давайте посмотрим, что 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
ответ дан 22 May 2018 в 18:39

Давайте посмотрим, что 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
ответ дан 18 July 2018 в 07:11

Давайте посмотрим, что 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
ответ дан 24 July 2018 в 18:45

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

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

1
ответ дан 22 May 2018 в 18:39

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

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

1
ответ дан 18 July 2018 в 07:11

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

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

1
ответ дан 24 July 2018 в 18:45

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

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