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.
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.

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
-
Abra o Prompt de Comando.
-
Codifique um arquivo para Base64:
certutil -encode input.bin output.b64Substitua
input.binpelo caminho do seu arquivo eoutput.b64pelo nome de arquivo de saída desejado. O arquivo começa com-----BEGIN CERTIFICATE-----, seguido pelo Base64 quebrado e, por fim,-----END CERTIFICATE-----. -
Remova as linhas de banner e imprima o corpo:
certutil -encode input.bin tmp.b64 && findstr /v /c:- tmp.b64 && del tmp.b64findstr /v /c:-remove todas as linhas que contêm-, o que elimina os dois banners. O corpo permanece quebrado.[Convert]::ToBase64Stringdo 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.