$ echo -n "apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407" | base64
YXBmanhraWMtb215dW9id2QzMzk4MDVhazo2MGEwNmNkMmRkZmFkNjEwYjk0OTBkMzU5ZDYwNTQw
Nw==
Вихід має повернення раніше Nw==
. Який правильний спосіб генерувати base64 в Linux?
5
Ви впевнені, що результат містить новий рядок, і це не лише обгортання вікна? Ця команда добре працювала для мене на Mac. Яку ОС ви використовуєте?
—
Ян
RFC 2045, який визначає Base64, ПОТРІБНО вимагає нового рядка після 76 символів (макс.) Що змушує вас вважати, що ваш приклад не є правильним?
—
MSalters
@MSalters RFC 4648 спеціально вирішує це питання. Реалізації НЕ ПОВИННІ додавати канали рядків до кодованих базовими даними, якщо специфікація, що посилається на цей документ, прямо не спрямовує базові кодери до додавання каналів рядків після певної кількості символів. => ця реалізація є некоректною згідно з RFC 4648, якщо вона стверджує, що дає "звичайний" вихід64-кодований вихід. Що ще цікавіше, GNU base64 (йдеться про питання?) Спеціально посилається на RFC 3548, який також вказує відсутність обгортання за замовчуванням і який RFC 4648 застаріває.
—
Боб
@Bob: RFC мають трохи менше поваги до стабільності API; інструмент base64 не може просто змінити вихідний формат, не порушуючи сценарії.
—
MSalters
@MSalters Я не можу бути впевнений, що старіша версія не існує, але GNU base64 був написаний у 2004 році, і AFAICT завжди стверджував, що дотримується RFC 3548. RFC 3548 містить той самий пункт "НЕ МОЖЕ додавати канали рядків". Тож навіть оригінальна реалізація була "неправильною". Принаймні, його реалізація не відповідає його документації. У будь-якому випадку ви запитали, чому приклад ОП є правильним, і посилаєтесь на RFC; моя відповідь - правильний RFC, який фактично визначає base64 ізольовано. Якщо ваша відповідь "з історичних причин", так і нехай, але ОП тут не помиляється.
—
Боб