$ echo -n "apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407" | base64
YXBmanhraWMtb215dW9id2QzMzk4MDVhazo2MGEwNmNkMmRkZmFkNjEwYjk0OTBkMzU5ZDYwNTQw
Nw==
A saída tem um retorno antes Nw==
. Qual é a maneira correta de gerar base64 no Linux?
5
Você tem certeza de que a saída contém uma nova linha e não é apenas a quebra de sua janela? Esse comando funcionou bem para mim no mac. Qual sistema operacional você está usando?
—
Ian
O RFC 2045, que definiu Base64, EXIGE uma nova linha após 76 caracteres (no máximo). O que faz você pensar que seu exemplo não é o caminho correto?
—
MSalters
O @MSalters RFC 4648 aborda especificamente esse problema. As implementações NÃO DEVEM adicionar feeds de linha aos dados codificados em base, a menos que a especificação referente a este documento direcione explicitamente os codificadores de base para adicionar feeds de linha após um número específico de caracteres. => esta implementação está incorreta de acordo com a RFC 4648, desde que pretenda produzir uma saída codificada em base64 'simples'. Mais interessante, as páginas de manual do GNU base64 (em questão?) Referem-se especificamente ao RFC 3548, que também especifica nenhum empacotamento por padrão e que o RFC 4648 obsoleta.
—
Bob
@ Bob: as RFCs têm um pouco menos de respeito pela estabilidade da API; uma ferramenta base64 não pode simplesmente mudar seu formato de saída sem interromper os scripts.
—
MSalters
@MSalters Não posso ter certeza de que não existe uma versão mais antiga, mas o GNU base64 foi escrito em 2004 e o AFAICT sempre afirmou seguir a RFC 3548. A RFC 3548 contém a mesma cláusula "NÃO DEVE adicionar feeds de linha". Portanto, mesmo a implementação original estava "errada". No mínimo, sua implementação não corresponde à sua documentação. Enfim, você perguntou por que o exemplo do OP está correto e referenciou uma RFC; minha resposta é a RFC correta que realmente define a base64 isoladamente. Se sua resposta for "por razões históricas", que seja, mas o OP não está errado aqui.
—
Bob