
저는 bash 쉘과 함께 CentOS 7을 사용하고 있습니다. 나는 바이너리 파일을 base64로 인코딩하는 것이 다음과 같이 간단할 것이라고 생각했습니다.
[rails@server lib]$ cat mybinary.file | base64 > /tmp/output.base64
하지만 파일 길이를 보면 4의 배수가 아닌 것을 알 수 있습니다.
[rails@server lib]$ ls -al /tmp/output.base64
-rw-rw-r-- 1 rails rails 92935 May 31 15:50 /tmp/output.base64
내가 한 일이 유효한지 아닌지는 모르겠지만 JS 라이브러리로 파일을 디코딩하려고 하면 문자열 길이가 4의 배수가 아니라는 사실에 대해 불평하는 오류가 발생하므로 위에서 제가 한 일이 맞는지, 아니면 다른 방법이 있는지 궁금합니다.
답변1
$ echo foo |base64
Zm9vCg==
$ echo foo |base64 |wc -c
9
의 출력에서 후행 개행 문자에 주목하세요 base64
. 여기서는 9번째 문자입니다.
더 긴 입력의 경우 기본적으로 76자마다 출력을 래핑하므로 두 줄 이상을 생성합니다. 를 사용 base64 -w0
하거나 를 통해 출력을 파이핑하여 래핑(최종 개행 포함)을 비활성화할 수 있습니다 tr -d '\n'
.
답변2
base64
적당히 긴 문자열에 대해 여러 줄을 작성하므로 파일 크기에서 올바른 개행 수를 빼야 합니다. 일부 시스템에서는 유틸리티가 DOS 텍스트 파일을 작성할 수 있습니다( base64
GNU coreutils가 아니라 다음 구현을 사용).네밀랩BSD 시스템에서 일반적임), 이 경우 인코딩된 문자열의 길이를 얻으려면 한 줄에 2바이트를 빼야 합니다.
댓글 질문에 대한 응답: "새 선취권이나 기타 쓰레기 없이 원시 base64 문자열을 어떻게 얻습니까? base64 문자열만 얻을 수 있습니까?"
base64
76자는 MIME 인코딩된 텍스트 줄의 최대 길이이기 때문에 76번째 문자마다 줄바꿈을 삽입합니다(그리고 기본 64는 이메일용 기본 64 콘텐츠 전송 인코딩을 만드는 데 가장 일반적으로 사용됩니다).
이러한 줄 바꿈을 제거하려면 다음을 수행하십시오.
base64 filename | tr -d '\n\r' >outfilename
GNU coreutils를 사용 하면 base64
다음을 사용할 수 있습니다.
base64 -w0 filename >outfilename
답변3
매뉴얼에 따르면:
SYNOPSIS base64 [OPTION]... [FILE] DESCRIPTION Base64 encode or decode FILE, or standard input, to standard output. With no FILE, or when FILE is -, read standard input.
당신이 하고 있는 일이 옳은 것처럼 들리지만, 나는 쓸모없는 의 사용을 유도하기보다는 와 cat
같은 것을 제안 하고 싶습니다 base64 file > file.b64
.