У меня есть зашифрованный файл, который закодирован с base64:
U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni
WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB
I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=
, и когда я запускаю:
cat encryptedfile | openssl enc -d -a
Я получаю кучу символов знака вопроса. Почему это происходит?
Давайте посмотрим, что 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 (например, Ώ), поскольку терминал пытается понять некоторые данные.
Зашифрованные данные не являются как ожидается, будет текстовым, поэтому нет никаких оснований для того, чтобы он придерживался последовательностей байтов, разрешенных некоторой кодировкой. Он может использовать любую доступную последовательность байтов.
Давайте посмотрим, что 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 (например, Ώ), поскольку терминал пытается понять некоторые данные.
Зашифрованные данные не являются как ожидается, будет текстовым, поэтому нет никаких оснований для того, чтобы он придерживался последовательностей байтов, разрешенных некоторой кодировкой. Он может использовать любую доступную последовательность байтов.
Давайте посмотрим, что 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 (например, Ώ), поскольку терминал пытается понять некоторые данные.
Зашифрованные данные не являются как ожидается, будет текстовым, поэтому нет никаких оснований для того, чтобы он придерживался последовательностей байтов, разрешенных некоторой кодировкой. Он может использовать любую доступную последовательность байтов.
Строка, кодированная base64, состоит только из 64 печатаемых символов, например. для MIME base64 A-Z, a-z, 0-9, +, /.
Если вы декодируете строку, вы получите полный диапазон байтов от 0..255, который также содержит непечатаемые символы, такие как управляющие символы, которые отображаются как вопросительные знаки.
Строка, кодированная base64, состоит только из 64 печатаемых символов, например. для MIME base64 A-Z, a-z, 0-9, +, /.
Если вы декодируете строку, вы получите полный диапазон байтов от 0..255, который также содержит непечатаемые символы, такие как управляющие символы, которые отображаются как вопросительные знаки.
Строка, кодированная base64, состоит только из 64 печатаемых символов, например. для MIME base64 A-Z, a-z, 0-9, +, /.
Если вы декодируете строку, вы получите полный диапазон байтов от 0..255, который также содержит непечатаемые символы, такие как управляющие символы, которые отображаются как вопросительные знаки.