Ho due blocchi di dati base64 in una variabile bash. Le solite interruzioni di riga all'interno dei dati base64 sono state sostituite da spazi e la variabile è sostanzialmente una stringa di una riga molto lunga.
Posso decodificare i due blocchi di dati base64 contenuti nella variabile ma ho provato alcune sfumature quando ho provato a farlo. Vorrei capire se mi sto avvicinando a questo correttamente o esiste un modo migliore per decodificare i dati base64 che non contengono interruzioni di riga. Ecco cosa ho:
Il primo blocco è di 350 caratteri e posso decodificarlo correttamente in questo modo:
echo ${DATA::350} | openssl base64 -d | wc -c
256
Il secondo blocco è di 5745 caratteri ma il comando sopra non produce i risultati previsti. vale a dire:
$ echo {DATA:350} | openssl base64 -d | wc -c
432
Tuttavia, funziona se inserisco le interruzioni di riga:
$ echo ${DATA:350} | tr ' ' "\n" | openssl base64 -d | wc -c
4240
Mi aspetto che ci sia un problema di lunghezza della linea che il primo blocco è abbastanza piccolo da evitare, e sembrerebbe essere una caratteristica del decodificatore base64 in uso (i due soliti, base64
e openssl base64
, comportarsi diversamente).
Il base64
decodificatore (invece di openssl base64
) si ferma al primo carattere non valido (lo spazio bianco) e quindi decodifica la prima "riga" (48 byte di dati di output) mentre OpenSSL emette 432 caratteri (9 "righe"). Il base64
comando ha un'opzione per ignorare la spazzatura , quindi funziona:
$ echo ${DATA:350} | base64 -d -i | wc -c
4240
Il decodificatore OpenSSL non sembra avere tale opzione.
Inoltre, rimuovere lo spazio bianco funziona interamente per base64
ma non openssl base64
:
$ echo ${DATA:350} | tr -d ' ' | openssl base64 -d | wc -c
400
$ echo ${DATA:350} | tr -d ' ' | base64 -d | wc -c
4240
Quindi, alla fine, ho sostituito le nuove righe e usato il decodificatore OpenSSL perché avevo bisogno di elaborare ulteriormente i dati decodificati:
$ openssl enc -d -a -in <(echo ${DATA:350} | /usr/bin/tr ' ' "\n") -aes-256-cbc -pass file:<(echo $skey) | ...
Ma vorrei capire OpenSSL può decodificare i dati base64 che non contengono interruzioni di riga?
tr
, usando${var//old[/new}
- ma non contemporaneamente alla sottostringa.