Я хотел бы написать скрипт bash для декодирования строки base64. Например, я набираю decode QWxhZGRpbjpvcGVuIHNlc2FtZQ== и он печатает Aladdin:open sesame и возвращается к подсказке.
До сих пор я пробовал простой файл bash, содержащий python -m base64 -d $1 но эта команда ожидает имя файла, а не строку. Есть ли другая неинтерактивная команда (не обязательно в модуле Python), которую я могу запустить из командной строки для достижения этой цели без необходимости установки каких-либо дополнительных пакетов? (Или, если я это сделаю, что-нибудь супер-минимальное.)
РЕДАКТИРОВАТЬ: Пример, в котором строка в кодировке base64 заканчивается несколькими строками:
$ openssl enc -base64 <<< 'And if the data is a bit longer, the base64 encoded data will span multiple lines.'QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNvZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=$ openssl enc -base64 -d << EOF> QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv> ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=> EOFAnd if the data is a bit longer, the base64 encoded data will span multiple lines.
С вашими исходными зависимостями это возможно сделать с незначительными изменениями в вашем исходном скрипте:
echo $1 | python -m base64 -d
Если вы не передаете имя файла, этот модуль python считывает данные из стандартного ввода. Чтобы передать в него первый параметр, вы можете использовать echo $1 |.
openssl base64 -e <<< 'Welcome to openssl wiki' V2VsY29tZSB0byBvcGVuc3NsIHdpa2kKopenssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'Welcome to openssl wiki
предупреждение длина строки base64 по умолчанию в openssl ограничена 64 символами :
openssl base64 -e <<< 'Welcome to openssl wiki with a very long line that splits...' V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo YXQgc3BsaXRzLi4uCg==openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='
>= НИЧЕГО !
чтобы иметь возможность декодировать строку base64 без перевода строки, которая превышает 64 символа, используйте опцию -A :
openssl base64 -d -A <<<'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='Welcome to openssl wiki with a very long line that splits...
В любом случае лучше фактически разделить результат base64 на 64 символьные строки, так как опция -A ГЛЮЧИТ (ограничение для длинных файлов).
У меня было несколько моментов, когда я дергал себя за волосы по этому поводу, потому что base64 Инструмент Linux, а также openssl действительно, может расшифровывать. Но у меня есть этот конкретный файл в кодировке base64, который декодируется с немного неправильным значением. Несколько байтов действительно совпадают, но тогда есть это присутствие EF BF BD EF BF BD когда я смотрю в hexedit зритель. И затем следующая последовательность байтов снова совпадает при сравнении с правильно декодированным ожидаемым результатом. Эти странные последовательности байтов были вставлены в промежуточные, когда-то как EF BF BD только.
Чтобы решить этот вопрос, я должен посмотреть, как отправитель Java кодирует его, а затем я создал небольшой декодер java base64. И теперь я могу расшифровать ожидаемое значение.