У меня есть две части данных base64 в переменной bash. Обычные разрывы строк в данных base64 были заменены пробелами, а переменная в основном представляет собой одну очень длинную однострочную строку.
Я могу декодировать два фрагмента данных base64, содержащихся в переменной, но у меня возникли некоторые нюансы при попытке сделать это. Я хотел бы понять, правильно ли я подхожу к этому или есть лучший способ декодировать данные base64, которые не содержат разрывов строк. Вот что у меня есть:
Первый блок содержит 350 символов, и я могу успешно его расшифровать следующим образом:
echo ${DATA::350} | openssl base64 -d | wc -c
256
Второй блок состоит из 5745 символов, но приведенная выше команда не дает ожидаемых результатов. то есть:
$ echo {DATA:350} | openssl base64 -d | wc -c
432
Тем не менее, это работает, если я поставлю разрывы строк:
$ echo ${DATA:350} | tr ' ' "\n" | openssl base64 -d | wc -c
4240
Я ожидаю, что есть некоторая проблема длины строки, которую первый блок достаточно мал, чтобы избежать, и это может показаться особенностью используемого декодера base64 (два обычных, base64
и openssl base64
ведут себя по-разному).
base64
Декодер (вместо openssl base64
) останавливается на первом недопустимого символа (пробелы) и , следовательно , только декодирует первую «линию» (48 байт выходных данных) , тогда как OpenSSL выводит 432 символов (9 «линии»). У base64
команды есть опция игнорировать мусор , так что это работает:
$ echo ${DATA:350} | base64 -d -i | wc -c
4240
OpenSSL-декодер не имеет такой возможности.
Кроме того, удаление пробелов полностью работает, base64
но не для openssl base64
:
$ echo ${DATA:350} | tr -d ' ' | openssl base64 -d | wc -c
400
$ echo ${DATA:350} | tr -d ' ' | base64 -d | wc -c
4240
Итак, в конце я заменил символы новой строки и использовал декодер OpenSSL, потому что мне все равно нужно было еще обрабатывать декодированные данные:
$ openssl enc -d -a -in <(echo ${DATA:350} | /usr/bin/tr ' ' "\n") -aes-256-cbc -pass file:<(echo $skey) | ...
Но я хотел бы понять, может ли OpenSSL декодировать данные base64, которые не содержат разрывов строк?
tr
использования,${var//old[/new}
но не одновременно с подстрокой.