Como você converte uma string codificada base64 utf-8 em um arquivo binário do bash?

1

Existe uma ferramenta que fará isso no bash?

    
por leeand00 08.07.2018 / 20:48

1 resposta

1

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
Москва
    
por 08.07.2018 / 23:38

Tags