base64 na konsoli
2010-09-16 03:58
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 ).
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
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 ).
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