Bash에 이 작업을 수행하는 도구가 있나요?
답변1
콤보
예, 여러 가지가 있습니다. 콤보coreutils
(debian에서는 기본적으로 설치됨) 둘 다 포함되어 있습니다.32 베이스그리고64비트 기반. 다음을 인코딩하거나 디코딩할 수 있습니다.
$ printf '%s' "abc" | base64
YWJj
$ printf '%s' "abc" | base64 | base64 -d
abc
echo를 사용하면 뒤에 개행 문자가 추가되어 결과적으로 Base64로 인코딩된 문자열이 변경될 수 있다는 점을 이해하세요.
$ echo "abc" | base64
YWJjCg==
패키지 basez
및 openssl
. 후자는 일반적으로 기본적으로 설치되지만 전자는 그렇지 않습니다.
$ printf '%s' "abc" | openssl base64
YWJj
코딩
소스 문자열은 base64 인코딩에 관계없이 모든 로케일(코드 페이지)로 인코딩됩니다. Base64 프로그램은 문자가 아닌 바이트를 인코딩합니다.
$ printf '%s' "éäìǫ" | base64 | base64 -d
éäìǫ
모든 시스템에서 정확히 동일하게 작동합니다. 글쎄요, 정상적인 시스템에서는 이 내용이 명령줄에도 인쇄 echo "éäìǫ"
됩니다 .éäìǫ
물론 소스 문자열이 한 시스템에서 인코딩된 다음 다른 로케일을 사용하는 시스템에서 디코딩되면 다음과 같은 결과가 나올 가능성이 높습니다.모지박끈. 이는 base64로 해결되는 문제가 아니라 문자열 인코딩을 변경하여 해결되는 문제입니다. 함께 있을 수도 있음iconv
.
$ echo -n "Москва" | base64 # in a utf8 locale
0JzQvtGB0LrQstCw
그러나 iso889-5를 사용하는 키릴어 로케일에서는(아마도 ru_RU.ISO-8859-5이지만 키릴어를 사용하는 다른 언어도 가능):
$ echo "0JzQvtGB0LrQstCw" | base64 -d
ааОбаКаВаА
$ echo "0JzQvtGB0LrQstCw" | base64 -d | iconv -f utf8 -t iso8859-5
Москва