Estou usando o CentOS 7 com bash shell. Eu pensei que a codificação base64 de um arquivo binário seria tão simples quanto
[rails@server lib]$ cat mybinary.file | base64 > /tmp/output.base64
No entanto, quando olho para o tamanho do arquivo, percebo que não é um múltiplo de quatro
[rails@server lib]$ ls -al /tmp/output.base64
-rw-rw-r-- 1 rails rails 92935 May 31 15:50 /tmp/output.base64
Não sei se o que fiz é válido ou não, mas quando tento decodificar o arquivo com uma biblioteca JS recebo um erro reclamando do fato de que o comprimento da string não é múltiplo de quatro, então estou querendo saber se o que eu fiz acima está correto ou se há alguma outra maneira de fazer isso.
Observe a nova linha à direita na saída de
base64
, é o nono caractere aqui.Para uma entrada mais longa, produzirá mais de uma linha, pois agrupa a saída a cada 76 caracteres por padrão. Você pode desabilitar a quebra (incluindo a nova linha final) com
base64 -w0
, ou canalizando a saída por meio detr -d '\n'
.base64
grava várias linhas para strings moderadamente longas, portanto, você deve deduzir o número correto de novas linhas do tamanho do arquivo. Em alguns sistemas, o utilitário pode escrever um arquivo de texto DOS (não combase64
GNU coreutils, mas com a implementação de fourmilab comum em sistemas BSD), caso em que você terá que deduzir 2 bytes por linha para obter o comprimento do codificado corda.Respondendo à pergunta nos comentários: "Como obtenho a string base64 bruta sem nenhum novo ônus ou outro lixo? Apenas a string base64?"
base64
insere quebras de linha após cada 76º caractere, pois 76 caracteres é o comprimento máximo de uma linha de texto codificada em MIME (e a base 64 é mais comumente usada para criar codificação de transferência de conteúdo base 64 para e-mails).Se você deseja remover essas quebras de linha:
Com
base64
o GNU coreutils, você pode usarPelo manual:
Parece que o que você está fazendo é certo, mas, em vez de invocar um uso inútil de
cat
, sugiro algo comobase64 file > file.b64
.