커맨드 라인을 통해 base64를 인코딩하는 방법은 무엇입니까?


215

Mac OS X에 파일 또는 stdin을 base64로 인코딩하는 터미널 명령이 있습니까?


5
base64 인코딩 구문은 OS마다 다르지만 base64 디코딩 구문은 운영 체제에 따라 다르거 base64 -dbase64 -D운영 체제에 따라 다릅니다. OSX는를 사용합니다 -D.
Chris Johnson

@ChrisJohnson openssl디코딩 플래그 와 함께 사용되는 경우 -dOS X (10.10 Yosemite)에 있습니다.
ᴠɪɴᴄᴇɴᴛ 2016 년

답변:


229

openssl이 작업을 수행 할 수 있으며 기본적으로 OS X와 ​​함께 설치됩니다. darwinports를 설치할 필요가 없습니다.

$ openssl base64 -in <infile> -out <outfile>

-in옵션이 없으면 stdin에서 읽습니다.


79
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy또는 cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy을 사용 하여 파일 쓰기를 건너 뛰고 줄 바꿈없이 base64로 인코딩 된 출력을 클립 보드로 복사하십시오.
Mathias Bynens

3
그리고 -d플래그를 사용 하여 디코딩하십시오.
kenny

5
Mac에서 문자열을 base64로 인코딩하고 openssl base64 -e <<< ram디코딩 하려면 다음 과 같이하십시오.openssl base64 -d <<< cmFtCg==
Ram Patra

8
@mathias openssl base64 [-e] -A는 줄 바꿈을 원하지 않으면 그렇게합니다. + 입력 난 그냥 명시된없는 줄 바꿈 경우를 포함한 대부분의 줄 바꿈마다 76 개 문자를 가지고 있지 않은 경우 디코딩에 @kenny, 당신이 필요 -d -A하거나 데이터가 없거나 손상된 얻을 것이다 오류 메시지를 보류 버그보고가 있지만 (이 수정 될 수 있습니다).
dave_thompson_085

2
@Ram은 openssl base64 -e <<< ram실제로 후행 줄 바꿈을 포함하여 4 바이트를 인코딩합니다. 참조하십시오 hexdump <<< ram.
Arjan

93

Openssl은 간결하게 사용할 수 있습니다.

echo -n 'input' | openssl base64

[echo -n->을 사용해야합니다. 그렇지 않으면 개행 문자를 포함하여 인코딩이 수행됩니다.]

또는

openssl base64 <ENTER> [type input] <CTRL+D>

10
"echo"솔루션은 입력 문자열의 끝에 LF (줄 바꿈) 문자를 추가합니다. -n '입력'에코 : 더 나은 사용
SuperTempel

8
심지어 좀 더 간결openssl base64 <<< input
개럿 Fogerlie

2
또는 base64없이 사용하십시오 openssl. 어느 쪽이든 Ctrl + D를 두 번 눌러야합니다. 또는하지 않고, 배쉬에서 : 그리고, @Garret 조심 openssl, openssl base64 <<< superuser그리고 openssl base64 <<< "superuser" 잘못 산출 c3VwZXJ1c2VyCg==은 "여기에 문자열"후 여전히 줄 바꿈이 포함로! ( 분명히 Bash뿐만 아니라 zsh, ksh 및 yash에서도 참조하십시오 hexdump <<< superuser. Base64 결과는이어야합니다 c3VwZXJ1c2Vy.)
Arjan

@Arjan "오류"라는 단어를 사용하는 것을 망설이고 있습니다. 여기서 지적했듯이 here-string에는 줄 바꿈이 포함되어 있지만 그 이유는 unix.stackexchange.com/questions/20157/… 입니다. echo -n줄 바꿈이 필요하지 않은 경우 선호됩니다. 확실히 알아야 할 사항입니다.
Steve Folly

2
printfecho -n
Jason S

50

다음을 사용하십시오.

base64 -i <in-file> -o <outfile>

OS X에서 기본적으로 사용 가능해야합니다.


1
--decode프로세스를 base64에서 normal로 되돌리려면 추가하십시오 .
luckydonald

1
SVG를 인코딩하는 데 한 줄을 작성하기 때문에 더 좋습니다. 의 출력보다 깨끗합니다 openssl base64. 감사!
Shanimal

32

base64 OS X 10.9.4에서 기본적으로 명령을 사용할 수 있습니다.

당신은 사용할 수 있습니다 base64 <<< stringbase64 -D <<< string인코딩 터미널에서 문자열을 디코딩하거나 base64 -in filebase64 -D -in file인코딩 파일을 디코딩 할 수 있습니다.


예가 있습니까? 내가 얻을 Invalid characer in input stream사용할 때 <<<... 내가 함께 시도하지 않은 ", '그리고 문자열 주위에 아무것도.
Jonas

@Jonas 당신은 어떤 껍질에 있습니까? 이것을 bash와 zsh에서 사용할 수 있습니다.
WKPlus

아, 신경 쓰지 마라!
Jonas

8

Python은 기본적으로 OS X와 ​​함께 제공되므로 다음과 같이 사용할 수 있습니다.

$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO

또는 Brew ( )를 coreutils통해 설치 하면 다음과 같은 명령 이 제공됩니다 .brew install coreutilsbase64

$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO

5

속도면에서 openssl, perl, uuencode를 사용합니다. 이식성 측면에서 uuencode와 Perl, openssl을 사용합니다 (가능한 경우 재고 플랫폼과 같은 다른 많은 UNIX에서 코드를 재사용하려는 경우). 모든 UNIX 변형이 -m 스위치를 지원하지는 않으므로주의하십시오 (iirc AIX, HP / UX, Solaris는 지원하지 않음).

$ time perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' \
> out.jpg 1>filename.b64
real    0m0.025s

$ time uuencode -m -o filename.b64 out.jpg filename_when_uudecoded.txt
real    0m0.051s

$  time openssl base64 -in out.jpg -out filename.b64 
real    0m0.017s

에 의해 지정된 64 기수 당 file_in.txt uuencode로 인코딩하는 -m 스위치를 사용 RFC1521 과 (디코딩 할 때 기본 파일 이름으로 filename_when_uudecoded.txt로)가 filename.b64에 쓸 수 :

uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt

STDIN 예 :

cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt

5

클립 보드에 바로 파이프 할 수도 있습니다 (적어도 Mac에서는).

openssl base64 -in [filename] | pbcopy


골프 :base64 < [filename] | pbcopy
전화

5

macOS에서는 항상 다음을 사용합니다.

echo -n "STRING" | base64

-n은 줄 끝에 줄 바꿈 문자를 사용하지 않는 것입니다.


3

파이썬

파이썬은 오늘날 모든 맥에 사전 설치되어 있습니다.

터미널 실행에서 python(또는 ipython ).

파일을 인코딩하십시오.

 base64data = open('myfile.jpg','rb').read().encode('base64')
 open('myfile.txt','w').write(base64data)

파일 디코딩

data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)

물론 두 작업을 모두 하나의 라이너로 변환 할 수 있지만 더 읽기 쉽습니다.

OpenSSL

## encode to base64 (on OSX use `-output`)
openssl base64 -in myfile.jpg -output myfile.jpg.b64

## encode to base64 (on Linux use `-out`)
openssl base64 -in myfile.jpg -out myfile.jpg.b64


## decode from base64 (on OSX `-output` should be used)
openssl base64 -d -in myfile.jpg.b64 -output myfile.jpg

## decode from base64 (on Linux `-out` should be used)
openssl base64 -d -in myfile.jpg.b64 -out myfile.jpg

-out/ -output... filename를 생략하면 표준 출력으로 인쇄됩니다.

base64

또 다른 ootb 유틸리티는 OSX와 Ubuntu에 있습니다 :

## encode to base64
base64 < myfile.jpg > myfile.jpg.b64

## decode from base64 (OSX) (note the uppercase 'D')
base64 -D < myfile.jpg.b64 > myfile.jpg

## decode from base64 (Linux) (note the lowercase 'd')
base64 -d < myfile.jpg.b64 > myfile.jpg

2
uuencode -m [-o output_file] [file] name

여기서 name 은 인코딩 된 헤더에 표시 할 이름입니다.

예:

cat docbook-xsl.css | uuencode -m docbook-xsl.css

또는

uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css

uuencode부호화뿐만 아니다base64
ccpizza

2

어떤 이유로 echo -n <data> | openssl base64base64 데이터 중간에 줄 바꿈을 추가했습니다. 내 base64 데이터가 실제로 길었기 때문이라고 생각합니다.

사용 echo -n <data> | base64인코딩 및 echo -n <base64-ed data> | base64 -D가공 한 벌금을 디코딩 할 수 있습니다.


nb : 내 nix에서 -d echo -n c29tZXVzZXI6c29tZXBhc3N3b3Jk를 사용해야했습니다. | base64 -d someuser : somepassword
mlo55

2

위의 Steve Folly의 답변 외에도 stdin 모드에서 암호화 할 때 추가 줄 바꿈을 피하려면 추가 줄 바꿈없이 입력을 끝내려면 CTRL + D를 두 번 누르십시오. 출력은 같은 줄 바로 뒤에 표시됩니다.

예를 들면 다음과 같습니다.

$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$

또는 다음을 사용할 수 있습니다 printf.

$ printf 'input' | openssl base64
aW5wdXQ=
$

1

Perl plus MIME :: Base64가 있습니다 :

perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'

이것은 사전 설치되어 제공됩니다. 명령 행에 별도의 파일을 지정하거나 표준 입력에 데이터를 제공 할 수 있습니다. 각 파일은 별도로 인코딩됩니다. 당신은 또한 할 수 있습니다 :

perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1

그러면 file1이 file1.txt로 백업되고 원본 파일 위에 Base-64로 인코딩 된 출력이 기록됩니다.


1

간단한 NodeJS 버전 :

node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"

나는 OS와 함께 openssl(그리고 지금 base64) 더 나은 대답이라고 생각하지 않습니다 .
Josh

분할 머리카락의 위험에서 - 그리고, 나뿐만 아니라,이 비판은 다른 답변의 몇 가지에 적용 알고 있어요 - 문제는 인코딩하는 방법을 묻는 파일 또는 표준 입력을 . 내가 실수하지 않으면 대답은 문자열을 인코딩하는 방법 만 보여줍니다.
G-Man

1

레코딩은 당신을 위해 트릭을해야합니다

recode ../b64 < file.txt > file.b64

레코딩은 MacPorts 를 통해 OS X에서 사용할 수 있습니다 .


내장 된 것이 없습니까?
Josh

@Josh -이 -하려면 openssl
스티브 어리 석음

MacPorts에는 OS X 배포판이 제공되지 않습니다. 다른 많은 옵션이 있습니다. 예를 들어 base64명령.
Jason S

1

글꼴 파일을 base64로 인코딩하는 경우 다음을 수행 할 수 있습니다.

base64 my-webfont.ttf > my-webfont.b64.ttf.txt

나는 항상 Mac (10.10)에서 이것을 사용합니다.

참고 : 줄 바꿈이 없습니다.


1

크로스 플랫폼 솔루션

파일을 base64로 인코딩하기 위해 크로스 플랫폼 셸 명령 목록을 컴파일했습니다. 다음 명령은 입력 파일 ( deploy.key예제에서 이름 지정) 을 가져와 줄 바꿈없이 base64로 변환합니다. base64 출력은 stdout을 통해 터미널에 인쇄됩니다.

# For systems with openssl
openssl base64 -A -in=deploy.key

# For systems with Python (2 or 3) installed
python -c "import base64; print(base64.standard_b64encode(open('deploy.key', 'rb').read()).decode())"

# For Windows or Linux systems that have the GNU coreutils base64 command
base64 --wrap=1000000 deploy.key

# For macOS systems
base64 --break=1000000 deploy.key

출력을 파일로 경로 재 지정하려면 > base64-encoded.txt선택한 파일 이름을 사용하여 추가 하십시오.

이 명령은이 풀 요청의 일부로 프로토 타입 화되었으며 개행을 제거하기 위해 SSH 개인 키를 base64로 인코딩하기위한 크로스 플랫폼 쉘 명령이 필요했습니다.

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