$ echo -n "apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407" | base64
YXBmanhraWMtb215dW9id2QzMzk4MDVhazo2MGEwNmNkMmRkZmFkNjEwYjk0OTBkMzU5ZDYwNTQw
Nw==
La sortie a un retour avant Nw==
. Quelle est la bonne façon de générer base64 sous Linux?
5
Etes-vous certain que la sortie contient une nouvelle ligne et qu'il ne s'agit pas uniquement du retour à la ligne? Cette commande a bien fonctionné pour moi sur mac. Quel système d'exploitation utilisez-vous?
Ian
47
La RFC 2045, qui définit Base64, NÉCESSITE une nouvelle ligne après 76 caractères (max). Qu'est-ce qui vous fait penser que votre exemple n'est pas la bonne?
MSalters
24
@MSalters RFC 4648 traite spécifiquement de ce problème. Les implémentations NE DOIVENT PAS ajouter de sauts de ligne aux données codées en base, à moins que la spécification faisant référence à ce document n'indique explicitement aux codeurs de base d'ajouter des sauts de ligne après un nombre spécifique de caractères. => cette implémentation est incorrecte selon la norme RFC 4648, dans la mesure où elle prétend produire une sortie "ordinaire" codée en base64. Plus intéressant encore, les pages de manuel GNU base64 (en question?) Font spécifiquement référence à la RFC 3548, qui spécifie également qu’il ne faut pas de wrapping par défaut, et que la RFC 4648 est obsolète.
Bob
4
@Bob: les RFC respectent un peu moins la stabilité des API; un outil base64 ne peut pas simplement changer son format de sortie sans casser des scripts.
MSalters
2
@MSalters Je ne peux pas être sûr qu'une version plus ancienne n'existe pas, mais GNU base64 a été écrit en 2004 et AFAICT a toujours prétendu suivre RFC 3548. La RFC 3548 contient la même clause "NE DOIT PAS ajouter de saut de ligne". Donc, même la mise en œuvre initiale était "fausse". À tout le moins, sa mise en œuvre ne correspond pas à sa documentation. Quoi qu'il en soit, vous avez demandé pourquoi l'exemple d'OP est correct et vous avez référencé une RFC; Ma réponse est la RFC correcte qui définit réellement base64 de manière isolée. Si votre réponse est "pour des raisons historiques", ainsi soit-il, mais OP n'a pas tort ici.
Bob