Respostas:
openssl
pode fazer isso por você e tudo está instalado no OS X por padrão; não é necessário instalar o darwinports.
$ openssl base64 -in <infile> -out <outfile>
Sem a -in
opção lê de stdin
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
ou cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
para pular a gravação em um arquivo e apenas copiar a saída codificada em base64 para a área de transferência sem quebras de linha.
-d
bandeira para decodificar.
openssl base64 -e <<< ram
e decodifica:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
faz isso. + @kenny ao decodificar se a entrada não possuir nova linha a cada 76 caracteres, incluindo o caso sem novas linhas que acabei de declarar, você precisa -d -A
ou receberá dados ausentes ou corrompidos sem mensagem de erro (embora exista um relatório de bug pendente que pode resultar em uma correção para isso).
openssl base64 -e <<< ram
na verdade codifica 4 bytes, incluindo um avanço de linha à direita; veja hexdump <<< ram
.
O Openssl pode ser usado de forma mais sucinta:
echo -n 'input' | openssl base64
[echo -n -> deve ser usado ou a codificação será feita incluindo o novo caractere de linha]
ou
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
sem openssl
. De qualquer forma, preciso pressionar Ctrl + D duas vezes. E cuidado, @Garret: no Bash, com ou sem openssl
, openssl base64 <<< superuser
e produza openssl base64 <<< "superuser"
erroneamentec3VwZXJ1c2VyCg==
, pois a "string aqui" ainda inclui um feed de linha! ( Aparentemente . Não apenas em Bash, mas também em zsh, ksh e yash Ver hexdump <<< superuser
. O resultado Base64 deve ser c3VwZXJ1c2Vy
.)
echo -n
é preferível se você não precisar da nova linha. Certamente é algo para estar ciente.
printf
no lugar deecho -n
Tente usar:
base64 -i <in-file> -o <outfile>
Ele deve estar disponível por padrão no OS X.
--decode
para reverter o processo da base64 ao normal.
openssl base64
. Obrigado!
base64
comando está disponível por padrão no meu OS X 10.9.4.
Você pode usar base64 <<< string
e base64 -D <<< string
para codificar e decodificar uma string no terminal, ou base64 -in file
e base64 -D -in file
para codificar e decodificar um arquivo.
Invalid characer in input stream
ao usar <<<
... eu tentei com "
, '
e nada ao redor da corda.
Como o Python é fornecido com o OS X por padrão, você pode usá-lo como abaixo:
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
Ou instale coreutils
via Brew ( brew install coreutils
) que fornecerá o base64
comando:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
Em termos de velocidade, eu usaria openssl seguido de perl, seguido de uuencode. Em termos de portabilidade, eu usaria o uuencode, seguido pelo Perl e o openssl (se você se preocupa em reutilizar o código em tantas outras plataformas UNIX quanto possível, como plataformas de estoque). Tenha cuidado, pois nem todas as variantes do UNIX suportam a opção -m (o iirc AIX, o HP / UX, o Solaris não).
$ time perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' \
> out.jpg 1>filename.b64
real 0m0.025s
$ time uuencode -m -o filename.b64 out.jpg filename_when_uudecoded.txt
real 0m0.051s
$ time openssl base64 -in out.jpg -out filename.b64
real 0m0.017s
Use a opção -m para uuencode file_in.txt por base64, conforme especificado pelo RFC1521, e grave -o em filename.b64 (com filename_when_uudecoded.txt como o nome de arquivo padrão quando decodificado):
uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
Exemplo de STDIN:
cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
Você também pode direcioná-lo diretamente para a área de transferência (pelo menos no mac):
openssl base64 -in [filename] | pbcopy
base64 < [filename] | pbcopy
Atualmente, o Python vem pré-instalado em todos os macs.
No Terminal, execute python
(ou ipython ).
Codifique um arquivo:
base64data = open('myfile.jpg','rb').read().encode('base64')
open('myfile.txt','w').write(base64data)
Decodifique um arquivo:
data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)
Obviamente, ambas as operações podem ser convertidas em um oneliner, mas dessa maneira é mais legível.
## encode to base64 (on OSX use `-output`)
openssl base64 -in myfile.jpg -output myfile.jpg.b64
## encode to base64 (on Linux use `-out`)
openssl base64 -in myfile.jpg -out myfile.jpg.b64
## decode from base64 (on OSX `-output` should be used)
openssl base64 -d -in myfile.jpg.b64 -output myfile.jpg
## decode from base64 (on Linux `-out` should be used)
openssl base64 -d -in myfile.jpg.b64 -out myfile.jpg
Omitir -out
/ -output... filename
imprimirá em stdout.
Outro utilitário ootb presente no OSX e no Ubuntu:
## encode to base64
base64 < myfile.jpg > myfile.jpg.b64
## decode from base64 (OSX) (note the uppercase 'D')
base64 -D < myfile.jpg.b64 > myfile.jpg
## decode from base64 (Linux) (note the lowercase 'd')
base64 -d < myfile.jpg.b64 > myfile.jpg
uuencode -m [-o output_file] [file] name
Onde nome é o nome a ser exibido no cabeçalho codificado.
Exemplo:
cat docbook-xsl.css | uuencode -m docbook-xsl.css
ou
uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
uuencode
não é a codificação comobase64
Por alguma razão, echo -n <data> | openssl base64
adicionei uma nova linha no meio dos meus dados base64. Suponho que foi porque meus dados base64 eram realmente longos.
Usar echo -n <data> | base64
para codificar e echo -n <base64-ed data> | base64 -D
decodificar funcionou bem.
Além da resposta de Steve Folly acima, ao criptografar no modo stdin, para evitar a transmissão de novas linhas extras, pressione CTRL + D duas vezes para finalizar a entrada sem novas linhas adicionais. A saída será exibida logo após a mesma linha.
Por exemplo:
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
Como alternativa, você pode usar printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
Há Perl mais MIME :: Base64:
perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'
Isso vem pré-instalado. Você pode especificar arquivos separados na linha de comando (ou fornecer os dados na entrada padrão); cada arquivo é codificado separadamente. Você também pode fazer:
perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1
Isso faz o backup de arquivo1 em arquivo1.txt e grava a saída codificada em Base-64 sobre o arquivo original.
Uma versão simples do NodeJS:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(e agora base64
) vem com o sistema operacional.
recodificar deve fazer o truque para você
recode ../b64 < file.txt > file.b64
recodificação está disponível para OS X via MacPorts .
base64
comando.
Se você estiver codificando base64 um arquivo de fonte, poderá fazer o seguinte:
base64 my-webfont.ttf > my-webfont.b64.ttf.txt
Eu uso isso em um Mac (10.10) o tempo todo.
Nota : Não haverá quebras de linha.
Compilamos uma lista de comandos shell de plataforma cruzada para codificar um arquivo como base64. Os comandos a seguir pegam um arquivo de entrada (nomeado deploy.key
em exemplos) e o convertem em base64 sem nenhuma quebra de linha nova. A saída base64 é impressa no terminal via stdout.
# For systems with openssl
openssl base64 -A -in=deploy.key
# For systems with Python (2 or 3) installed
python -c "import base64; print(base64.standard_b64encode(open('deploy.key', 'rb').read()).decode())"
# For Windows or Linux systems that have the GNU coreutils base64 command
base64 --wrap=1000000 deploy.key
# For macOS systems
base64 --break=1000000 deploy.key
Para redirecionar a saída para um arquivo, acrescente > base64-encoded.txt
(usando um nome de arquivo de sua escolha).
Esses comandos foram prototipados como parte dessa solicitação de recebimento, onde queríamos que os comandos do shell de plataforma cruzada base64 codificassem uma chave privada SSH para remover novas linhas.
base64 -d
oubase64 -D
depende do seu sistema operacional. OSX usa-D
.