Planilha de referência para codificação e decodificação Base64: exemplos de comandos em Windows, Linux e Mac

Codifique e decodifique Base64 em Windows, Linux e Mac.

Conteúdo da página

Esta folha de dicas mostra como codificar e decodificar Base64 em Windows, Linux e macOS com certutil, PowerShell e base64, incluindo as bandeiras que variam por sistema.

homem barbado fazendo codificação avançada à noite

Este guia faz parte de Ferramentas de Desenvolvimento: O Guia Completo para Fluxos de Trabalho Modernos de Desenvolvimento. Base64 mapeia cada três bytes de entrada para quatro caracteres de A–Z, a–z, 0–9, + e /. A decodificação não precisa de chave: o alfabeto e o caractere de preenchimento = são suficientes para recuperar os bytes originais.

O base64 do Linux quebra linhas em 76 caracteres, a menos que -w 0 seja definido; o base64 do macOS escreve uma linha, a menos que -b defina uma quebra; e o certutil -encode do Windows adiciona banners de certificado em torno das linhas quebradas. Os comandos Linux abaixo foram executados com GNU coreutils 9.7, uutils coreutils 0.10.0, BusyBox 1.37.0 e OpenSSL 3.5.5. Os comandos macOS usam as bandeiras -i, -D e -b documentadas para esse binário desde o OS X 10.7.

Codificar e Decodificar Base64 no Windows

O Windows não inclui um comando base64. Certutil e PowerShell são incluídos nativamente.

Usando o Prompt de Comando com Certutil

  1. Abra o Prompt de Comando.

  2. Codifique um arquivo para Base64:

    certutil -encode input.bin output.b64
    

    Substitua input.bin pelo caminho do seu arquivo e output.b64 pelo nome de arquivo de saída desejado. O arquivo começa com -----BEGIN CERTIFICATE-----, seguido pelo Base64 quebrado e, por fim, -----END CERTIFICATE-----.

  3. Remova as linhas de banner e imprima o corpo:

    certutil -encode input.bin tmp.b64 && findstr /v /c:- tmp.b64 && del tmp.b64
    

    findstr /v /c:- remove todas as linhas que contêm -, o que elimina os dois banners. O corpo permanece quebrado. [Convert]::ToBase64String do PowerShell é o resultado de uma linha.

Decodificar Base64 no Windows (Certutil)

certutil -decode encoded.b64 decoded.bin

certutil -decode aceita o arquivo com banner que -encode gravou. Também aceita um arquivo Base64 puro.

Usando PowerShell para Codificar e Decodificar

[Convert]::ToBase64String do PowerShell escreve uma linha e não adiciona banners. Para mais automação de shell, veja a Folha de Dicas PowerShell.

Codificar um arquivo:

[Convert]::ToBase64String([System.IO.File]::ReadAllBytes("C:\path\to\file.bin"))

Codificar uma string (UTF-8):

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("Hello, World!"))
# Output: SGVsbG8sIFdvcmxkIQ==

Encoding.Unicode é UTF-16LE. Os mesmos caracteres então codificam como SABlAGwAbABvACwAIABXAG8AcgBsAGQAIQA=. O base64 do Linux dos bytes UTF-8 produz SGVsbG8sIFdvcmxkIQ==.

Decodificar Base64 para string:

[System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("SGVsbG8s IFdvcmxkIQ=="))
# Output: Hello, World!

Decodificar Base64 para arquivo:

[System.IO.File]::WriteAllBytes("decoded.bin", [Convert]::FromBase64String((Get-Content encoded.b64 -Raw)))

FromBase64String aceita espaços, tabulações e quebras de linha. Ele lança uma exceção para o banner BEGIN CERTIFICATE, portanto um arquivo do certutil precisa passar por certutil -decode (ou os banners precisam ser removidos primeiro).

Codificar e Decodificar Base64 no Linux

base64 --version indica o binário em PATH. Uma linha que começa com base64 (GNU coreutils) é GNU. No Ubuntu 25.10 e 26.04, /usr/bin/base64 é uutils da rust-coreutils; o pacote 26.04 verificado aqui era uutils coreutils 0.10.0. O GNU coreutils 9.7 é gnubase64 do pacote gnu-coreutils.

Ambos aceitam um arquivo posicional, -d / --decode, -i / --ignore-garbage e -w / --wrap. A quebra padrão é 76. -w 0 desativa isso. O uutils 0.10.0 também trata -D como um alias de -d. O GNU coreutils 9.7 termina com invalid option -- 'D' em -D.

O encadeamento (piping) e a aspas para esses comandos de uma linha são cobertos na Folha de Dicas Bash.

Codificar um Arquivo para Base64

base64 input_file > output_file

Exemplo:

base64 myfile.txt > encoded.txt

Para imprimir o conteúdo codificado no terminal:

base64 myfile.txt

Codificar uma String para Base64

printf '%s' 'Hello, World!' | base64 -w 0
# Output: SGVsbG8sIFdvcmxkIQ==

printf '%s' escreve os bytes que você passa e para. echo sem -n adiciona uma quebra de linha, então o mesmo texto codifica como SGVsbG8sIFdvcmxkIQo=. No bash, echo -n "Hello, World!" | base64 -w 0 coincide com a linha printf. echo -n não é portável para todos os sh.

Desativar Quebra de Linha (-w 0)

GNU e uutils quebram em 76 caracteres, incluindo quando a saída padrão é um arquivo ou um pipe. JSON, variáveis de ambiente, URLs e um valor data do Kubernetes precisam de uma linha. base64encode() do Terraform retorna uma linha de Base64 padrão, então a saída de CLI que é comparada com ela precisa ser produzida com quebra desativada:

base64 -w 0 input_file > output_file

Decodificar Base64 no Linux

base64 -d encoded_file > decoded_file
# ou
base64 --decode encoded_file > decoded_file

Exemplo:

printf '%s' 'SGVsbG8sIFdvcmxkIQ==' | base64 -d
# Output: Hello, World!

GNU coreutils desde 9.5, e uutils 0.10.0, decodificam Base64 padrão que omite o preenchimento =. printf '%s' 'SGVsbG8' | base64 -d imprime Hello. Os codificadores ainda emitem o preenchimento. Versões mais antigas do base64 GNU rejeitavam entrada sem preenchimento.

-i / --ignore-garbage ignora caracteres fora do alfabeto durante a decodificação. Quebras de linha já são permitidas. Espaços não são, a menos que -i esteja definido:

printf '%s' 'SGVs bG8=' | base64 -di
# Output: Hello

No GNU e uutils, -i não aceita um nome de arquivo. base64 -i input_file codifica input_file porque o nome é um argumento posicional e -i apenas muda a decodificação. No macOS, -i é a bandeira de arquivo de entrada.

OpenSSL

OpenSSL 3.5.5 quebra em 64 caracteres. -A mantém a saída em uma linha:

printf '%s' 'data' | openssl base64 -e -A
# Output: ZGF0YQ==
printf '%s' 'ZGF0YQ==' | openssl base64 -d -A
# Output: data

Sem -A, um buffer longo é quebrado a cada 64 caracteres, o que é uma largura diferente do base64 GNU.

BusyBox

BusyBox 1.37.0 aceita -d e -w COL (padrão 76, 0 desativa quebra). --decode falha com unrecognized option '--decode', e -D falha com invalid option -- 'D'. A decodificação já ignora caracteres fora do alfabeto: printf '%s' 'SGVs!bG8=' | busybox base64 -d imprime Hello. -i é aceito e não aparece na linha de ajuda.

Codificar e Decodificar Base64 no macOS

O macOS inclui um base64 BSD. Um nome de arquivo é passado com -i. Redirecionamento de stdin funciona sem -i: base64 < input_file.

Codificar um Arquivo para Base64

base64 -i input_file > output_file

Exemplo:

base64 -i myfile.txt > encoded.txt

Para imprimir no terminal:

base64 -i myfile.txt

O intervalo de quebra padrão é 0, então o texto codificado é uma linha. -b count insere uma quebra de linha a cada count caracteres. base64 -w 0 é a opção do Linux; o binário macOS não a usa. base64 -b 0 -i input_file é a forma explícita de uma linha.

Codificar e Copiar para a Área de Transferência

base64 -i input_file | pbcopy

Decodificar Base64 no Mac

base64 -D -i encoded_file > decoded_file

-D é decodificar. Essas bandeiras -i e -D são a interface do macOS desde o OS X 10.7. Um script Linux que chama base64 -d deve chamar base64 -D no macOS.

Bandeiras por Implementação

Bandeira GNU coreutils 9.7 uutils 0.10.0 BusyBox 1.37.0 macOS
-d / --decode Decodificar Decodificar (-D é um alias) apenas -d; --decode dá erro Usar -D
-i --ignore-garbage durante a decodificação --ignore-garbage durante a decodificação Aceito, não listado em --help; bytes não-alfabéticos já são ignorados Arquivo de entrada
-w N Quebrar em N colunas (padrão 76); 0 desativa Mesmo padrão e 0 Mesmo; sem opção longa Não esta bandeira; usar -b
-b N Não aceito Não aceito Não aceito Quebra de linha a cada N caracteres (padrão 0)
Alfabeto no texto de ajuda RFC 4648 RFC 3548 (sem linha de RFC) RFC 4648

A RFC 4648 obsoletiza a RFC 3548. O alfabeto padrão em ambos os documentos é A–Z, a–z, 0–9, +, /.

base64 -i file codifica no Linux, porque -i é booleana lá e file é o operando posicional. O mesmo comando no macOS também codifica, porque -i consome file como o caminho de entrada. base64 -D -i file decodifica no macOS e no uutils 0.10.0.

Base64url para JWT

Os segmentos de cabeçalho e payload do JWT usam base64url (seção 5 da RFC 4648): - e _ substituem + e /, e o preenchimento = geralmente é omitido. O base64 -d padrão então falha. No uutils 0.10.0 o erro é invalid input.

basenc GNU (e gnubasenc no Ubuntu 26.04) aceita a forma sem preenchimento:

printf '%s' 'aGVsbG8_Ky93b3JsZA' | gnubasenc --base64url -d
# Output: hello?+/world

basenc --base64url -d do uutils 0.10.0 requer que o preenchimento seja restaurado para um múltiplo de 4. O mesmo segmento com == anexado decodifica. Codificar e remover o preenchimento para um token no estilo JWT:

printf '%s' 'hello?+/world' | basenc --base64url -w 0 | tr -d '='
# Output: aGVsbG8_Ky93b3JsZA

jq decodifica segmentos JWT com @base64d, que é o caminho em Decodificar e imprimir token JWT.

PowerShell pode construir o mesmo alfabeto:

$b = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("hello?+/world"))
$b.TrimEnd("=").Replace("+","-").Replace("/","_")

Casos de Uso Comuns

Caso de uso Comando / abordagem
Cabeçalho/payload JWT base64url, geralmente sem preenchimento. GNU basenc --base64url -d, ou jq @base64d
HTTP Basic Auth printf '%s' 'user:pass' | base64 -w 0 → Authorization: Basic dXNlcjpwYXNz
Segredo do Kubernetes de um arquivo kubectl create secret generic mysecret --from-file=key=file.bin
Segredo do Kubernetes de uma string kubectl create secret generic mysecret --from-literal=key=value
cURL Basic Auth curl -u user:pass, ou -H "Authorization: Basic $(printf '%s' 'user:pass' | base64 -w 0)"
Data URI em HTML data:image/png;base64,$(base64 -w 0 image.png) no Linux

kubectl create secret codifica os valores --from-literal e --from-file em base64 por conta própria. Prefixar o valor com base64 -w 0, como em --from-literal=key=$(base64 -w 0 file.bin), armazena uma segunda codificação, e um base64 -d posterior ainda retorna Base64. A Folha de Dicas Kubernetes usa a forma em texto puro, --from-literal=username=admin.

Em um manifesto, cada valor data já é uma linha de Base64 padrão, e stringData contém a string bruta. O servidor de API mescla stringData em data. O Kubernetes documenta que stringData não funciona bem com server-side apply. O objeto é texto codificado; o etcd o armazena sem criptografia, a menos que a criptografia em repouso esteja ativada.

curl -u escreve o cabeçalho Authorization: Basic. Construir esse cabeçalho a partir de user:pass é coberto na Folha de Dicas cURL.

Quando a Decodificação Falha

base64 --version é a verificação quando -D ou -w se comporta de forma incorreta. A linha GNU e a linha uutils são diferentes, e -D no Linux corresponde à linha uutils.

Um valor decodificado que termina com uma linha vazia inclui uma quebra de linha do echo. Recodifique essa entrada com printf '%s'.

base64 file | wc -l imprime quantas linhas quebradas o codificador emitiu. Uma contagem acima de 1 no Linux significa que o comando foi executado sem -w 0.

invalid input em texto que contém - ou _ é um alfabeto base64url, típico de um segmento JWT. Decodifique com basenc --base64url, e no uutils 0.10.0 anexe = até que o comprimento seja um múltiplo de 4.

Subscrever

Receba novos artigos sobre sistemas, infraestrutura e engenharia de IA.