openssl
pode fazer isso por você e tudo é instalado com o OS X por padrão; não há necessidade de instalar o darwinports.
$ openssl base64 -in <infile> -out <outfile>
Sem a opção -in
da stdin
Existe um comando de terminal no Mac OS X que irá codificar em base64 um arquivo ou stdin?
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>
Tente usar:
base64 -i <in-file> -o <outfile>
Ele deve estar disponível por padrão no OS X.
base64
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.
Como o Python é fornecido com o OS X por padrão, você pode usá-lo da seguinte forma:
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
Ou instale coreutils
via Preparar ( brew install coreutils
), que fornecerá o comando base64
:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
Em termos de velocidade, eu usaria openssl seguido por perl, seguido por uuencode. Em termos de portabilidade, eu usaria uuencode seguido por Perl seguido por openssl (Se você se preocupa em reutilizar o código em tantas outras plataformas de estoque UNIX quanto possível). Tenha cuidado, porque nem todas as variantes do UNIX suportam o switch -m (o iirc AIX faz, o HP / UX faz, 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 por RFC1521 e escreva-o para filename.b64 (com filename_when_uudecoded.txt como nome de arquivo padrão quando decodificado):
uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
Exemplo STDIN:
cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
Você também pode canalizar diretamente para a área de transferência (pelo menos no mac):
openssl base64 -in [filename] | pbcopy
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
Por alguma razão, echo -n <data> | openssl base64
adicionou uma nova linha no meio dos meus dados base64. Eu suponho que foi porque meus dados de base64 foram muito longos.
Usar echo -n <data> | base64
para codificar e echo -n <base64-ed data> | base64 -D
para decodificar funcionou bem.
O Python vem pré-instalado em todos os macs atualmente.
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)
É claro que ambas as operações podem ser convertidas em um oneliner, mas desta forma é 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
A omissão do -out
/ -output... filename
será impressa no 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
Existe o Perl mais o 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
Faz o backup do arquivo1 para o arquivo1.txt e grava a saída codificada na 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!"
recode deve fazer o truque para você
recode ../b64 < file.txt > file.b64
O recode está disponível para o OS X através de MacPorts .
Se você estiver codificando com base64 um arquivo de fonte, você pode fazer isso:
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.
Além da resposta de Steve Folly acima, ao criptografar no modo stdin, para evitar passar novas linhas extras, pressione CTRL + D duas vezes para finalizar a entrada sem nenhuma nova linha adicional. A saída será mostrada 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=
$
No macOS eu sempre uso:
echo -n "STRING" | base64
-n é para evitar um novo caractere de linha no final da linha.
Tags command-line encoding macos base64