명령 줄에서 base64 문자열을 어떻게 디코딩합니까?


426

base64 문자열을 디코딩하는 bash 스크립트를 작성하고 싶습니다. 예를 들어 입력 decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==하면 인쇄 Aladdin:open sesame하고 프롬프트로 돌아갑니다.

지금까지 나는 간단한 bash 파일을 시도 python -m base64 -d $1했지만이 명령은 파일 이름이 문자열이 아닌 것으로 예상합니다. 추가 패키지를 설치하지 않고도 명령 줄에서 실행할 수있는 다른 비 대화식 명령 (파이썬 모듈 일 필요는 없음)이 있습니까? (또는 내가 할 경우, 최소한의 무언가)

답변:


630

패키지 에서 base64프로그램을 사용하십시오 coreutils.

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

또는 개행 문자를 포함 시키려면

echo `echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode`

출력 (개행 포함) :

Aladdin:open sesame

10
또는 : echo QWxhZGRpbjpvcGVuIHNlc2FtZQ == | base64로 --decode && 에코
그렉 Chabala

61
또는 :base64 -d <<< QWxhZGRpbjpvcGVuIHNlc2FtZQ==
jmk

4
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | "C:\Program Files\Git\usr\bin\base64" --decode 2> nul > example.txtgit의 base64가있는 Windows의 경우
Fire

3
그렇지 않은 @January Just use많은 사람들이 알고 있기 때문에, base64프로그램 -하지만 하나는 할 수 없기 때문에 단지 명령 줄 옵션으로 문자열을 삽입, 한 동안 한 번만 CLI 터치 사용자를위한 구문 권리를 얻기 어렵다.
feeela

12
Mac에서는 인코딩 된 문자열을 클립 보드에 복사하고를 실행하십시오 pbpaste | base64 --decode.
Marián Černý

95

openssl은 base64를 인코딩하고 디코딩 할 수도 있습니다.

$ openssl enc -base64 <<< 'Hello, World!'
SGVsbG8sIFdvcmxkIQo=
$ openssl enc -base64 -d <<< SGVsbG8sIFdvcmxkIQo=
Hello, World!

편집 : base64로 인코딩 된 문자열이 여러 줄로 끝나는 예 :

$ openssl enc -base64 <<< 'And if the data is a bit longer, the base64 encoded data will span multiple lines.'
QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv
ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=
$ openssl enc -base64 -d << EOF
> QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv
> ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=
> EOF
And if the data is a bit longer, the base64 encoded data will span multiple lines.

8
필립의 대답 덕분에, 당신은, 그렇지 않으면하려면 openssl는 아무 것도 반환하지 않습니다 긴 base64로 문자열을 -A를 추가 볼 필요가 askubuntu.com/a/271676/305568
morloch

@morloch 또는 base64로 인코딩 된 데이터에서 줄 바꿈을 제거하지 않으면 예상대로 작동합니다.
geirha

1
나는 생각하지 것 coreutils같은 프로그램을 포함하고있는 "추가"패키지를 ls, mkdir, cp, mv,와 chmod. 나는 당신이 그것없이 당신의 기계로 유용한 무엇이든 할 수 있을지 의심합니다.
vidstige

@vidstige, 맞습니다. base64가 기본적으로 설치되지 않았다는 인상을받는 이유를 모르겠습니다. 그것은 사실이 아닙니다.
geirha

1
이것이 우분투 스택 교환이지만, 사용 openssl하면 base64Windows의 Git Bash에서 작동하는 표준 , 내가 설치 한 이전의 1.8.1 Git Bash 버전 이상에 비해 이점이 있습니다 .
willkil

38

여기 있습니다!

~/.bashrc파일 맨 아래에 다음을 추가 하십시오.

decode () {
  echo "$1" | base64 -d ; echo
}

이제 새 터미널을 열고 명령을 실행하십시오.

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

이것은 당신이 당신의 질문에서 요구 한 것을 정확하게 할 것입니다.


20

원래 종속성을 사용하면 원본 스크립트를 약간만 수정하여이 작업을 수행 할 수 있습니다.

echo $1 | python -m base64 -d

파일 이름을 전달하지 않으면 해당 파이썬 모듈은 표준 입력에서 읽습니다. 첫 번째 매개 변수를 파이프하려면을 사용할 수 있습니다 echo $1 |.


1
또한 : python -m base32 filename
kenorb

1
이것은 작동하지 않습니다 :)하지만 .b32 * 메소드를 사용하십시오
rzr

13

http://wiki.opensslfoundation.com/index.php?title=Command_Line_Utilities 에서 base64 명령 줄을 주석 처리했습니다 . 따라서 openssl base64 디코딩을 사용할 때 경고를 발행합니다.

 openssl base64 -e <<< 'Welcome to openssl wiki'

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki

경고 base64 줄 길이는 openssl에서 기본적으로 64 자로 제한됩니다 .

 openssl base64 -e <<< 'Welcome to openssl wiki with a very long line
 that splits...'

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
 YXQgc3BsaXRzLi4uCg==

openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='

=> 아무것도 아닙니다!

64자를 초과하는 줄 바꿈없이 base64 줄을 디코딩하려면 -A 옵션을 사용하십시오.

openssl base64 -d -A <<<
'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='

Welcome to openssl wiki with a very long line that splits...

-A 옵션이 BUGGY (긴 파일의 한계)이므로 base64 결과를 64 자로 줄 바꿈하는 것이 좋습니다.


4

사용 perl

perl -MMIME::Base64 -ne 'printf "%s\n",decode_base64($_)' <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

또는 같은 python

python -m base64 -d <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

2

다른 방법을 추가하면됩니다.

emacs -Q --batch  -eval '(princ (base64-encode-string (read-string ": ")))'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.