base64 na konsoli

Niejednokrotnie zdarza się, że potrzebujemy przekazywać informacje pomiędzy różnymi systemami (nierzadko napisanymi w różnych językach programowania). Z reguły też musimy uważać na istniejące w takich danych spacje, znaki końca lini, cudzysłowy i inne temu podobne. Wiadomym jest, że każdy taki znak musimy enkodować tak, aby nie zakłócił przekazu (oraz nie stanowił potencjalnej dziury w systemie umożliwiającej takie spreparowanie danych, że system po ich otrzymaniu wykona zupełnie co innego).

Rozwiązaniem na te bolączki może być proste kodowanie Base64. Nie należy tego mylić z żadnym szyfrowaniem. Należy myśleć o tym jako o konwersji (odwracalnej) dowolnego ciągu znaków w ciąg znaków ASCII, z którym to już możemy zrobić co tylko chcemy. Po szczegóły techniczne zerknijcie do
artykułu na Wikipedii.
W skrócie - Base64 ukryje wszystkie nieporządane znaki, w tym spacje oraz znaki końca lini. Dzięki temu taką zakodowaną postać możemy przekazywać jako jeden łańcuch znaków.

Kodowanie/dekodowanie możemy wykonywać we wszystkich językach programowania, są także gotowe narzędzia skryptowe. Dziś interesją mnie w szczególności te ostatnie, a zwłaszcza
pakiet openssl, który jest dostępny zarówno na windę, linuxa jak i mac os x (tu już po prostu jest Happy).

Zatem, aby zakodować coś w przenaszalnym formacie base64 należy wykonać na konsoli:
openssl enc -base64 -in file.txt -out file.b64.txt
(zakładając, że w pliku
file.txt znajdują się dane (tekst lub dane binarne) do zakodowania, a wynik trafi do pliku file.b64.txt).
Domyślnie
openssl formatuje wynikowe dane w wiersze zawierające określoną liczbę znaków, dzięki czemu wynikowy plik to tak naprawdę kolumna tekstu (wiele wierszy).
Z reguły to nie przeszkadza. Jednak czasami jest to problem. Np. chcieliśmy się pozbyć wszystkich spacji i znaków końca linii, a niekoniecznie dostać ładnie sformatowany tekst wynikowy.

Na szczęście możliwe jest zakodowanie wszystkiego do jednej lini (nie tracąc znaków końca wiersza w pliku źródłowym). W tym celu należy użyć dodatkowe opcji
-A, tak jak poniżej:
openssl enc -A -base64 -in file.txt -out file.b64.txt

Odkodowanie polega tylko na dodaniu przełącznika
-d, niezależnie od użytego (lub nie) przełącznika -A:
openssl enc -base64 -d -in file.b64.txt -out file.txt
blog comments powered by Disqus