Entenda que o uso de echo pode adicionar uma nova linha à direita que alterará a string codificada em base64 resultante:
$ echo "abc" | base64
YWJjCg==
Existem também outros pacotes que possuem ferramentas semelhantes em pacotes baseze arquivos 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 seja codificada em qualquer localidade (página de código) é irrelevante para a codificação base64. Um programa base64 codifica bytes, não caracteres.
$ printf '%s' "éäìǫ" | base64 | base64 -d
éäìǫ
Funcionará em qualquer sistema exatamente da mesma forma. Bem, em qualquer sistema são em que echo "éäìǫ"também imprimirá éäìǫna linha de comando.
Obviamente, se a string de origem for codificada em um sistema e depois decodificada em um sistema com uma localidade diferente, é bastante provável que você obtenha uma string Mojibake . Isso não é um problema a ser resolvido pela 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 outros idiomas com cirílico):
Pacotes
Sim, existem vários. O pacote
coreutils
(instalado por padrão no debian) contém base32 e base64 . Eles poderiam codificar ou decodificar:Entenda que o uso de echo pode adicionar uma nova linha à direita que alterará a string codificada em base64 resultante:
Existem também outros pacotes que possuem ferramentas semelhantes em pacotes
basez
e arquivosopenssl
. O último também geralmente é instalado por padrão, o primeiro não.Codificação
Que a string de origem seja codificada em qualquer localidade (página de código) é irrelevante para a codificação base64. Um programa base64 codifica bytes, não caracteres.
Funcionará em qualquer sistema exatamente da mesma forma. Bem, em qualquer sistema são em que
echo "éäìǫ"
também imprimiráéäìǫ
na linha de comando.Obviamente, se a string de origem for codificada em um sistema e depois decodificada em um sistema com uma localidade diferente, é bastante provável que você obtenha uma string Mojibake . Isso não é um problema a ser resolvido pela base64, é um problema a ser resolvido alterando a codificação da string. Provavelmente com
iconv
.No entanto, em uma localidade cirílica com iso889-5 (talvez ru_RU.ISO-8859-5, existem outros idiomas com cirílico):