Existe um comando de terminal no Mac OS X que codifica base64 um arquivo ou stdin?
macos
command-line
encoding
base64
Josh
fonte
fonte
base64 -d
oubase64 -D
depende do seu sistema operacional. OSX usa-D
.openssl
o sinalizador para decodificação, está-d
no OS X (10.10 Yosemite).Respostas:
openssl
pode fazer isso por você e tudo está instalado no OS X por padrão; não é necessário instalar o darwinports.Sem a
-in
opção lê de stdinfonte
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
oucat 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; vejahexdump <<< ram
.O Openssl pode ser usado de forma mais sucinta:
[echo -n -> deve ser usado ou a codificação será feita incluindo o novo caractere de linha]
ou
fonte
openssl base64 <<< input
base64
semopenssl
. De qualquer forma, preciso pressionar Ctrl + D duas vezes. E cuidado, @Garret: no Bash, com ou semopenssl
,openssl base64 <<< superuser
e produzaopenssl 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 Verhexdump <<< superuser
. O resultado Base64 deve serc3VwZXJ1c2Vy
.)echo -n
é preferível se você não precisar da nova linha. Certamente é algo para estar ciente.printf
no lugar deecho -n
Tente usar:
Ele deve estar disponível por padrão no OS X.
fonte
--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
ebase64 -D <<< string
para codificar e decodificar uma string no terminal, oubase64 -in file
ebase64 -D -in file
para codificar e decodificar um arquivo.fonte
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:
Ou instale
coreutils
via Brew (brew install coreutils
) que fornecerá obase64
comando:fonte
No macOS, eu sempre uso:
echo -n "STRING" | base64
-n é para evitar um novo caractere de linha no final da linha.
fonte
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).
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):
Exemplo de STDIN:
fonte
Você também pode direcioná-lo diretamente para a área de transferência (pelo menos no mac):
openssl base64 -in [filename] | pbcopy
fonte
base64 < [filename] | pbcopy
Pitão
Atualmente, o Python vem pré-instalado em todos os macs.
No Terminal, execute
python
(ou ipython ).Codifique um arquivo:
Decodifique um arquivo:
Obviamente, ambas as operações podem ser convertidas em um oneliner, mas dessa maneira é mais legível.
OpenSSL
Omitir
-out
/-output... filename
imprimirá em stdout.base64
Outro utilitário ootb presente no OSX e no Ubuntu:
fonte
Onde nome é o nome a ser exibido no cabeçalho codificado.
Exemplo:
ou
fonte
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 eecho -n <base64-ed data> | base64 -D
decodificar funcionou bem.fonte
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:
Como alternativa, você pode usar
printf
:fonte
Há Perl mais MIME :: 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:
Isso faz o backup de arquivo1 em arquivo1.txt e grava a saída codificada em Base-64 sobre o arquivo original.
fonte
Uma versão simples do NodeJS:
fonte
openssl
(e agorabase64
) vem com o sistema operacional.recodificar deve fazer o truque para você
recodificação está disponível para OS X via MacPorts .
fonte
base64
comando.Se você estiver codificando base64 um arquivo de fonte, poderá fazer o seguinte:
Eu uso isso em um Mac (10.10) o tempo todo.
Nota : Não haverá quebras de linha.
fonte
Soluções multiplataforma
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.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.
fonte