Mac OS X에 파일 또는 stdin을 base64로 인코딩하는 터미널 명령이 있습니까?
openssl
디코딩 플래그 와 함께 사용되는 경우 -d
OS X (10.10 Yosemite)에 있습니다.
Mac OS X에 파일 또는 stdin을 base64로 인코딩하는 터미널 명령이 있습니까?
openssl
디코딩 플래그 와 함께 사용되는 경우 -d
OS X (10.10 Yosemite)에 있습니다.
답변:
openssl
이 작업을 수행 할 수 있으며 기본적으로 OS X와 함께 설치됩니다. darwinports를 설치할 필요가 없습니다.
$ openssl base64 -in <infile> -out <outfile>
-in
옵션이 없으면 stdin에서 읽습니다.
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
또는 cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
을 사용 하여 파일 쓰기를 건너 뛰고 줄 바꿈없이 base64로 인코딩 된 출력을 클립 보드로 복사하십시오.
-d
플래그를 사용 하여 디코딩하십시오.
openssl base64 -e <<< ram
디코딩 하려면 다음 과 같이하십시오.openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
는 줄 바꿈을 원하지 않으면 그렇게합니다. + 입력 난 그냥 명시된없는 줄 바꿈 경우를 포함한 대부분의 줄 바꿈마다 76 개 문자를 가지고 있지 않은 경우 디코딩에 @kenny, 당신이 필요 -d -A
하거나 데이터가 없거나 손상된 얻을 것이다 오류 메시지를 보류 버그보고가 있지만 (이 수정 될 수 있습니다).
openssl base64 -e <<< ram
실제로 후행 줄 바꿈을 포함하여 4 바이트를 인코딩합니다. 참조하십시오 hexdump <<< ram
.
Openssl은 간결하게 사용할 수 있습니다.
echo -n 'input' | openssl base64
[echo -n->을 사용해야합니다. 그렇지 않으면 개행 문자를 포함하여 인코딩이 수행됩니다.]
또는
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
없이 사용하십시오 openssl
. 어느 쪽이든 Ctrl + D를 두 번 눌러야합니다. 또는하지 않고, 배쉬에서 : 그리고, @Garret 조심 openssl
, openssl base64 <<< superuser
그리고 openssl base64 <<< "superuser"
잘못 산출 c3VwZXJ1c2VyCg==
은 "여기에 문자열"후 여전히 줄 바꿈이 포함로! ( 분명히 Bash뿐만 아니라 zsh, ksh 및 yash에서도 참조하십시오 hexdump <<< superuser
. Base64 결과는이어야합니다 c3VwZXJ1c2Vy
.)
echo -n
줄 바꿈이 필요하지 않은 경우 선호됩니다. 확실히 알아야 할 사항입니다.
printf
echo -n
다음을 사용하십시오.
base64 -i <in-file> -o <outfile>
OS X에서 기본적으로 사용 가능해야합니다.
--decode
프로세스를 base64에서 normal로 되돌리려면 추가하십시오 .
openssl base64
. 감사!
base64
OS X 10.9.4에서 기본적으로 명령을 사용할 수 있습니다.
당신은 사용할 수 있습니다 base64 <<< string
및 base64 -D <<< string
인코딩 터미널에서 문자열을 디코딩하거나 base64 -in file
및 base64 -D -in file
인코딩 파일을 디코딩 할 수 있습니다.
Invalid characer in input stream
사용할 때 <<<
... 내가 함께 시도하지 않은 "
, '
그리고 문자열 주위에 아무것도.
속도면에서 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
파이썬은 오늘날 모든 맥에 사전 설치되어 있습니다.
터미널 실행에서 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)
물론 두 작업을 모두 하나의 라이너로 변환 할 수 있지만 더 읽기 쉽습니다.
## 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
를 생략하면 표준 출력으로 인쇄됩니다.
또 다른 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
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
어떤 이유로 echo -n <data> | openssl base64
base64 데이터 중간에 줄 바꿈을 추가했습니다. 내 base64 데이터가 실제로 길었기 때문이라고 생각합니다.
사용 echo -n <data> | base64
인코딩 및 echo -n <base64-ed data> | base64 -D
가공 한 벌금을 디코딩 할 수 있습니다.
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로 인코딩 된 출력이 기록됩니다.
간단한 NodeJS 버전 :
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(그리고 지금 base64
) 더 나은 대답이라고 생각하지 않습니다 .
파일을 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로 인코딩하기위한 크로스 플랫폼 쉘 명령이 필요했습니다.
base64 -d
나base64 -D
운영 체제에 따라 다릅니다. OSX는를 사용합니다-D
.