Pacotes
Sim, existem vários. O pacote coreutils
(instalado por padrão no debian) carrega ambos base32 e base64. Eles poderiam codificar ou decodificar:
$ printf '%s' "abc" | base64
YWJj
$ printf '%s' "abc" | base64 | base64 -d
abc
Entenda que usar echo pode adicionar uma nova linha à direita que alterará a string codificada base64 resultante:
$ echo "abc" | base64
YWJjCg==
Existem também outros pacotes que possuem ferramentas semelhantes nos pacotes basez
e openssl
. O último também é geralmente instalado por padrão, o primeiro não é.
$ printf '%s' "abc" | openssl base64
YWJj
Codificação
Que a string de origem é codificada em qualquer local (página de código) é irrelevante para a codificação base64. Um programa base64 codifica bytes, não caracteres.
$ printf '%s' "éäìǫ" | base64 | base64 -d
éäìǫ
Trabalhará em qualquer sistema exatamente da mesma maneira. Bem, em qualquer sistema sã em que echo "éäìǫ"
também imprima éäìǫ
na linha de comando.
Naturalmente, se a string de origem for codificada em um sistema e decodificada em um sistema com um código de idioma diferente, é bem provável que você obtenha um Mojibake string. Isso não é um problema a ser resolvido por base64, é um problema a ser resolvido alterando a codificação da string. Provavelmente com iconv
.
$ echo -n "Москва" | base64 # in a utf8 locale
0JzQvtGB0LrQstCw
No entanto, em uma localidade cirílica com iso889-5 (talvez ru_RU.ISO-8859-5, existem outras línguas com cirílico):
$ echo "0JzQvtGB0LrQstCw" | base64 -d
ааОбаКаВаА
$ echo "0JzQvtGB0LrQstCw" | base64 -d | iconv -f utf8 -t iso8859-5
Москва