Por que exibir uma string criptografada no terminal ou nano cria símbolos estranhos?

1

Eu tenho um arquivo criptografado codificado com base64:

U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni
WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB
I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=

e quando eu corro:

cat encryptedfile | openssl enc -d -a

Eu recebo vários símbolos de ponto de interrogação. Por que isso acontece?

    
por NerdOfLinux 08.09.2017 / 17:17

2 respostas

3

Vamos ver o que o file tem a dizer sobre seus dados:

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

Então, após base64-decoding, você obtém os dados criptografados. E agora com 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  
$ base64 -d <<EOF | file - 
U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni
WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB
I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=
EOF
/dev/stdin: openssl enc'd data with salted password
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

Claramente, nem todos esses bytes são textos em nossas codificações habituais (ASCII ou UTF-8). O terminal não tem como entender a maioria desses bytes e os mostra como pontos de interrogação. Alguns deles aparecem como texto ASCII, alguns como símbolos mais altos no gráfico Unicode ( Ώ , por exemplo), porque o terminal tenta fazer algum sentido dos dados.

Não é esperado que os dados criptografados sejam texto, portanto, não há motivos para manter sequências de bytes permitidas por alguma codificação. Ele pode usar qualquer sequência de bytes disponível, e isso faz.

    
por muru 08.09.2017 / 18:54
1

Uma string codificada base64 consiste em apenas 64 caracteres imprimíveis,
por exemplo. para MIME base64 A-Z , a-z , 0-9 , + , / .

Se você decodificar a string, obterá o intervalo de bytes completo de 0..255, que também contém caracteres não imprimíveis, como caracteres de controle , que aparecem como pontos de interrogação.

    
por zx485 08.09.2017 / 18:21