문자열의 base64에“\ n”이 포함 된 이유는 무엇입니까?


84
$ echo -n "apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407" | base64
YXBmanhraWMtb215dW9id2QzMzk4MDVhazo2MGEwNmNkMmRkZmFkNjEwYjk0OTBkMzU5ZDYwNTQw
Nw==

출력은 이전에 리턴 값을 갖습니다 Nw==. Linux에서 base64를 생성하는 올바른 방법은 무엇입니까?

터미널 스크린 샷


5
출력에 줄 바꿈이 포함되어 있고 창 줄 바꿈이 아니라고 확신합니까? 그 명령은 Mac에서 잘 작동했습니다. 어떤 OS를 사용하고 있습니까?
Ian

47
Base64를 정의한 RFC 2045는 76 자 (최대) 뒤에 줄 바꿈이 필요합니다. 당신의 모범이 올바른 방법 이 아니라고 생각하는 이유는 무엇입니까 ?
MSalters

24
@MSalters RFC 4648은 특히이 문제를 해결합니다. 이 문서를 참조하는 사양에서 명시 적으로 기본 엔코더가 특정 문자 수 다음에 줄 바꿈을 추가하도록 지시하지 않는 한 구현시 기본 인코딩 된 데이터에 줄 바꿈을 추가해서는 안됩니다. =>이 구현은 '일반'base64 인코딩 출력을 생성한다고 주장하는 한 RFC 4648에 따라 올바르지 않습니다. 더욱 흥미롭게도 GNU base64 (문제가되는) 맨 페이지는 기본적으로 래핑을 지정하지 않으며 RFC 4648이 더 이상 사용하지 않는 RFC 3548을 참조합니다.
Bob

4
@Bob : RFC는 API 안정성에 대해 약간 덜 존중합니다. base64 도구는 스크립트를 깨지 않고 출력 형식을 변경할 수 없습니다.
MSalters

2
@MSalters 나는 구버전이 존재하지 않는다고 확신 할 수 없지만, GNU base64는 2004 년에 작성되었으며 AFAICT는 항상 RFC 3548을 따르라고 주장했다. RFC 3548에는 "MUST NOT add line feeds"절이 포함되어있다. 따라서 원래 구현조차도 "잘못된"것입니다. 최소한 구현은 문서와 일치하지 않습니다. 어쨌든 OP의 예제가 왜 정확하고 RFC를 참조했는지 묻습니다. 내 응답은 실제로 base64를 분리하여 정의하는 올바른 RFC입니다. 귀하의 답변이 "역사적 이유"인 경우에는 OP가 잘못된 것은 아닙니다.
Bob

답변:


151

시험:

echo -n "apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407" | base64 -w 0

보낸 사람 man base64:

-w, 문자 --wrap=COLS
뒤에 인코딩 된 줄 바꿈 COLS(기본값 76). 사용하여 0줄 바꿈을 비활성화 할 수 있습니다.


17
오, 난 항상 이것을 통해 파이프 tr. "적절한 방법"이 있다는 것을 아는 것이 좋습니다.
Score_Under

기본값이 0이 아닌 이유에 대한 설명은 나에게 미안합니다.
Dherik

1
@Dherik 나는 추측 은 텍스트 처리 도구에 대한 예의입니다. base64임의의 이진 데이터를 텍스트로 인코딩합니다. 텍스트를 기대하는 도구는 일반적으로 한 번에 한 줄씩 읽으며 매우 긴 줄을 잘 처리하지 못할 수 있습니다 . -w 0기본값 인 경우 기본적으로 한 줄의 텍스트 만 표시됩니다. 입력이 크면 엄청 긴 줄. 기본적으로 줄 바꿈하는 것이 좋습니다. 내 생각 76은보다 덜이기 때문에 선택되었다 80되는 단말기에 대한 사실상의 표준의 일종 .
Kamil Maciorowski

@KamilMaciorowski 정보를 주셔서 감사합니다. 내가 base64명령을 사용할 때마다 -w 0(그리고 잊어 버렸을 때 이상한 일이 발생할 수 있습니다 ...)이 필요했기 때문에이 기본 동작은 나에게 매우 이상했습니다.
Dherik

54

-w옵션을 지원하는 시스템에 대한 Kamil의 대답보다 열등 base64하지만, 사용할 수없는 경우 (예 : Alpine Linux, Arch Linux initramfs후크 등) base64의 출력을 수동으로 처리 할 수 ​​있습니다.

base64 some_file.txt | tr -d \\n

이것은 무차별 접근 방식입니다. 프로그램을 협력하는 대신 trstdout의 모든 줄 바꿈을 무차별 적으로 제거 하는 데 사용 하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.