Comando base64: Básico de Codificação e Decodificação
O que você vai conseguir fazer
- Codificar e decodificar strings e arquivos com `base64`
- Distinguir codificação, criptografia e hash
- Evitar a armadilha do newline do `echo` e a sobrescrita do `>`
Pré-requisitos (leia estes primeiro)
O Que Você Vai Aprender
- Como codificar e decodificar strings e arquivos com
base64 - Como distinguir codificação, criptografia e hash
- Como evitar a armadilha do newline que o
echoadiciona - Opções comuns como
-w(wrap) e-d(decode)
Para quem é este artigo: Iniciantes em Linux que viram uma string base64 em um token de API ou anexo de email e se perguntaram "o que é isso?"
As palavras usadas aqui (é aqui que as pessoas confundem)
- Codificação: mudar a forma de escrever os dados. Não envolve chave. Qualquer pessoa reverte. O
base64é isto. - Criptografia: deixar os dados legíveis apenas para quem tem a chave. Sem a chave, o conteúdo continua escondido. Ferramentas como o
opensslfazem isso. - Hash: gerar um valor curto a partir do conteúdo. Não dá para reverter. Serve para responder "são iguais?". Ferramentas como o
sha256sumfazem isso.
Os três produzem uma string de aparência estranha. O que muda é se dá para reverter e se é preciso uma chave. O base64 daqui é do tipo que qualquer pessoa reverte sem chave.
Introdução: A String Misteriosa da Lina
SGVsbG8gV29ybGQ= em um arquivo de configuração. O que é isso? Uma senha criptografada?base64. Mas uma coisa importante antes de tudo: isso não é criptografia.base64 -d e qualquer um recupera o original. Então não serve para proteger segredos. Hoje vamos ver o básico do base64 e por que ele existe.Resumo Rápido
base64representa dados binários com apenas 64 caracteres ASCII (A-Za-z0-9+/). O=final é enchimento para ajustar o tamanho- Codifique com
base64, decodifique combase64 -d - Não é criptografia. Qualquer um decodifica. Nunca use para proteger segredos
1. O Que é base64?
Conclusão: base64 converte dados binários em 64 caracteres ASCII. É embalagem para transporte, não criptografia.
base64 representa qualquer dado usando só 64 caracteres. Não é "criptografia", é embalagem para transporte. O conteúdo não fica escondido, mas a forma viaja em segurança.Onde o base64 é usado
- Anexos de e-mail (MIME)
- Headers de autenticação HTTP Basic
- Binário embutido em arquivos de configuração / JSON (imagens, certificados)
- URLs
data:(embutir imagens direto no HTML)
2. Codificando uma String
Conclusão: Use um pipe de
echo -nparabase64. Sem-n, o newline final também é codificado.
Hello World.base64 com |.$ echo -n "Hello World" | base64
SGVsbG8gV29ybGQ=
Não esqueça o -n em echo -n
Por padrão o echo adiciona um newline no fim. Sem -n, esse único caractere de newline (\n) também é codificado. A string resultante muda.
-n para o echo?$ echo "Hello World" | base64
SGVsbG8gV29ybGQK
= para K. Então um newline invisível causou isso.echo -n ou printf.SGVsbG8gV29ybGQ= vs SGVsbG8gV29ybGQK
O final muda: = (sem newline) ou K (com o \n). Ao codificar um token ou senha em base64, essa contaminação por newline é um bug clássico. Sempre use echo -n ou printf.
# printf nao adiciona newline, evitando o problema do -n faltante $ printf '%s' "Hello World" | base64
3. Decodificando
Conclusão: Use
base64 -d(ou--decode). Qualquer um executa, então não há sigilo.
SGVsbG8gV29ybGQ= de volta. Basta adicionar -d.$ echo "SGVsbG8gV29ybGQ=" | base64 -d
Hello World
-d e --decode são a mesma coisa
Tanto base64 -d quanto base64 --decode funcionam. O curto -d é mais comum.
openssl.4. Codificando e Decodificando Arquivos
Conclusão: Passe um nome de arquivo para codificar; redirecione a saída de
-dpara um arquivo para restaurar.
# Criar um arquivo de pratica $ echo "practice" > sample.txt # Codificar um arquivo e salvar como .b64 $ base64 sample.txt > sample.txt.b64 # Decodificar o .b64 de volta em um arquivo restaurado $ base64 -d sample.txt.b64 > restored.txt
Binário como imagens ou certificados passa exatamente pelos mesmos passos.
Onde os arquivos caem e o risco de sobrescrita
- Os arquivos novos são criados no diretórioUm local que organiza arquivos. É a mesma ideia da "pasta" do Windows ou macOS. em que você está agora. Confira com
pwd >é o redirecionamento do shellUm programa interativo que interpreta os comandos digitados e os executa.. Se o nome já existir, ele apaga o conteúdo e sobrescreve- Nada pede confirmação. Diferente de um ambiente gráfico, o conteúdo sobrescrito não vai para a lixeira
- Se a sobrescrita preocupa, rode
ls restored.txtantes para ver se o nome está ocupado - O
base64não roda no terminal virtual deste site. Execute-o no terminal da sua máquina - Pratique dentro do diretório vazio criado em "7. Mini Exercício". Lá nada do que você já tinha pode quebrar
diff ou sha256sum. Se baterem, a restauração foi perfeita.# Verificar se o original e o restaurado sao identicos $ diff sample.txt restored.txt && echo "OK: identicos"
OK: identicos
O tamanho cresce cerca de 1,33x
O base64 transforma 3 bytes em 4 caracteres. A saída codificada fica cerca de 4/3 (uns 33% maior) que o original. Cuidado ao codificar arquivos grandes onde o espaço é apertado.
5. Controlando a Quebra de Linha com -w
Conclusão:
base64quebra a cada 76 caracteres por padrão. Use-w 0para uma única linha.
base64 insere um newline a cada 76 caracteres (wrapping) por padrão. Isso segue a especificação MIME de e-mail.-w 0. -w é de "wrap", e 0 significa sem quebra.# Sem wrapping (linha unica) $ base64 -w 0 image.png > oneline.b64 # Quebrar a cada 40 caracteres $ echo -n "Hello World, this is a longer text" | base64 -w 40
O base64 do macOS não tem -w
-w é uma opção do GNU coreutils (padrão no Linux). O base64 do macOS (BSD) não tem -w e controla a quebra de outro jeito. Este artigo assume Linux (GNU coreutils).
6. Armadilhas Comuns
Conclusão: "confundir com criptografia", "contaminação por newline do echo" e "invalid input ao decodificar" são os três tropeços maiores.
Armadilha 1: achar que base64 é criptografia
Esta é a mais perigosa. O base64 pode ser decodificado por qualquer pessoa. Colocar um segredo em base64 e depois enviar para o GitHub ou registrar em log é uma fonte infinita de incidentes. Sempre criptografe os dados que precisam ficar escondidos.
Armadilha 2: contaminação por newline do echo
Como vimos na seção 2, esquecer o echo -n codifica o newline junto. Quando um token codificado em base64 falha na autenticação, suspeite disso primeiro.
Armadilha 3: invalid input ao decodificar
Se um espaço ou caractere estranho entra no copiar e colar, aparece base64: invalid input. O base64 usa exatamente 64 caracteres (A-Z a-z 0-9 + /), e qualquer outro vira erro.
Use -i (--ignore-garbage) para pular os caracteres fora desses 64 e decodificar mesmo assim.
# Ignorar newlines ou espacos estranhos ao decodificar $ base64 -d -i messy.b64
Templates seguros (copiar e colar)
# Codificar uma string (sem newline adicionado) printf '%s' "texto" | base64 # Codificar em uma linha (sem wrapping) base64 -w 0 file.bin # Decodificar echo "SGVsbG8=" | base64 -d
7. Mini Exercício: Tente Você Mesmo
Conclusão: Três tarefas (codificar, ida e volta, diferença do newline) fixam o comportamento do base64.
Crie um diretório de prática vazio e trabalhe dentro dele. Assim você nunca sobrescreve um arquivo que já tinha.
# Prepare um diretorio de pratica e entre nele $ mkdir -p ~/base64-practice && cd ~/base64-practice
Tarefa 1: Codifique o seu próprio nome com base64, sem newline no fim.
Ver Dica 1 (Direção)
Passe por pipe a saída de um comando que imprime texto. Escolha a forma que não adiciona newline.
Ver Dica 2 (Nome do comando)
Use printf '%s' ou echo -n e depois um pipe para base64.
Ver Resposta
$ printf '%s' "Lina" | base64
TGluYQ==
printf '%s' e echo -n mantêm o newline final de fora.
Tarefa 2: Decodifique a saída da Tarefa 1 e confirme que o original volta.
Ver Dica 1 (Direção)
Use o mesmo comando com uma opção que inverte o sentido.
Ver Dica 2 (Nome do comando)
Use base64 -d.
Ver Resposta
$ echo "TGluYQ==" | base64 -d
Lina
Se o seu nome original aparece igual, a ida e volta deu certo.
Tarefa 3: Codifique tanto echo -n "test" quanto echo "test" e explique em uma linha por que os resultados diferem.
Ver Dica 1 (Direção)
Você não vê, mas um deles envia um caractere a mais no fim.
Ver Dica 2 (Nome do comando)
Rode echo -n "test" | base64 e echo "test" | base64 e compare a saída.
Ver Resposta
$ echo -n "test" | base64 $ echo "test" | base64
dGVzdA== dGVzdAo=
O echo adiciona um newline (\n) no fim por padrão. echo "test" codifica test\n (5 bytes) e echo -n "test" codifica test (4 bytes). Entrada diferente, string base64 diferente.
Retomando
Conclusão: base64 não serve para esconder dados; é uma embalagem para transportá-los com segurança.
base64 não serve para esconder algo, e sim para embalar para transporte.Resumo em Três Linhas
Conclusão: base64 é uma conversão sem chave, e não criptografia nem hash.
base64é codificação, uma mudança de forma de escrita. Qualquer um reverte combase64 -d- Criptografia precisa de chave. Hash não pode ser revertido. O base64 não é nenhum dos dois
- Use
echo -nouprintfpara strings, e cuidado com a sobrescrita do>ao gravar arquivos