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, base64e openssl base64, comportarsi diversamente).
Il base64decodificatore (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 base64comando 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 base64ma 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.