$ echo -n "apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407" | base64
YXBmanhraWMtb215dW9id2QzMzk4MDVhazo2MGEwNmNkMmRkZmFkNjEwYjk0OTBkMzU5ZDYwNTQw
Nw==
Đầu ra có một sự trở lại trước Nw==
. Cách chính xác để tạo base64 trong Linux là gì?
5
Bạn có chắc chắn đầu ra chứa một dòng mới, và nó không chỉ là gói cửa sổ của bạn? Lệnh đó đã làm việc tốt cho tôi trên mac. Bạn đang sử dụng hệ điều hành nào?
—
Ian
RFC 2045, được xác định Base64, YÊU CẦU một dòng mới sau 76 ký tự (tối đa). Điều gì khiến bạn nghĩ rằng ví dụ của bạn không phải là cách chính xác?
—
MSalters
@MSalters RFC 4648 đặc biệt giải quyết vấn đề đó. Việc triển khai KHÔNG PHẢI thêm nguồn cấp dữ liệu vào dữ liệu được mã hóa cơ sở trừ khi thông số kỹ thuật tham chiếu đến tài liệu này chỉ đạo rõ ràng bộ mã hóa cơ sở để thêm nguồn cấp dữ liệu sau một số ký tự cụ thể. => việc triển khai này không chính xác theo RFC 4648, miễn là nó tuyên bố sẽ tạo ra đầu ra được mã hóa 'base64'. Thú vị hơn, các trang web GNU base64 (trong câu hỏi?) Đề cập cụ thể đến RFC 3548, cũng chỉ định không có gói theo mặc định và RFC 4648 đã lỗi thời.
—
Bob
@Bob: RFC có một chút ít tôn trọng tính ổn định của API; một công cụ base64 không thể thay đổi định dạng đầu ra mà không phá vỡ các tập lệnh.
—
MSalters
@MSalters Tôi không thể chắc chắn một phiên bản cũ hơn không tồn tại, nhưng GNU base64 đã được viết vào năm 2004 và AFAICT luôn tuyên bố tuân theo RFC 3548. RFC 3548 có cùng điều khoản "PHẢI KHÔNG thêm nguồn cấp dữ liệu". Vì vậy, ngay cả việc thực hiện ban đầu là "sai". Ít nhất, việc thực hiện nó không phù hợp với tài liệu của nó. Dù sao, bạn đã hỏi tại sao ví dụ của OP là chính xác và tham chiếu RFC; Phản hồi của tôi là RFC chính xác thực sự xác định Base64 trong sự cô lập. Nếu câu trả lời của bạn là "vì lý do lịch sử", thì cũng vậy, nhưng OP không sai ở đây.
—
Bob