Eu tenho dois pedaços de dados base64 em uma variável bash. As quebras de linha usuais nos dados base64 foram substituídas por espaços e a variável é basicamente uma sequência de uma linha muito longa.
Posso decodificar os dois blocos de dados base64 contidos na variável, mas experimentei algumas nuances ao tentar fazer isso. Gostaria de entender se estou abordando isso corretamente ou se há uma maneira melhor de decodificar dados base64 que não contêm quebras de linha. Aqui está o que eu tenho:
O primeiro pedaço tem 350 caracteres e posso decodificá-lo com sucesso da seguinte forma:
echo ${DATA::350} | openssl base64 -d | wc -c
256
O segundo pedaço tem 5745 caracteres, mas o comando acima não produz os resultados esperados. ou seja:
$ echo {DATA:350} | openssl base64 -d | wc -c
432
No entanto, funciona se eu colocar a linha de volta:
$ echo ${DATA:350} | tr ' ' "\n" | openssl base64 -d | wc -c
4240
Espero que exista algum problema no comprimento da linha que o primeiro pedaço seja pequeno o suficiente para evitar, e isso pareceria um recurso do decodificador base64 sendo usado (os dois usuais base64
e openssl base64
se comportam de maneira diferente).
O base64
decodificador (em vez de openssl base64
) para no primeiro caractere inválido (espaço em branco) e, portanto, apenas decodifica a primeira "linha" (48 bytes de dados de saída), enquanto o OpenSSL gera 432 caracteres (9 "linhas"). O base64
comando tem uma opção para ignorar o lixo , portanto, isso funciona:
$ echo ${DATA:350} | base64 -d -i | wc -c
4240
O decodificador OpenSSL não parece ter essa opção.
Além disso, a remoção do espaço em branco funciona inteiramente para, base64
mas não para openssl base64
:
$ echo ${DATA:350} | tr -d ' ' | openssl base64 -d | wc -c
400
$ echo ${DATA:350} | tr -d ' ' | base64 -d | wc -c
4240
Então, no final, substituí as novas linhas e usei o decodificador OpenSSL porque precisava processar os dados decodificados de qualquer maneira:
$ openssl enc -d -a -in <(echo ${DATA:350} | /usr/bin/tr ' ' "\n") -aes-256-cbc -pass file:<(echo $skey) | ...
Mas eu gostaria de entender O OpenSSL pode decodificar dados base64 que não contêm quebras de linha?
tr
, usando${var//old[/new}
- mas não ao mesmo tempo como substring.