반달가면 이글루에서 백업 - http://bahndal.egloos.com/611457
문자열에 대한 베이스64(base64) 인코딩/디코딩은 이전 게시물을 참고하자. 여기로
리눅스에서 base64를 이용해서 베이스64 인코딩을 할 때, 문자열이 짧을 경우에는 별 문제가 없다. 아래와 같이 인코딩 하면 된다.
# 문자열 abc를 베이스64 인코딩(echo에서 -n 옵션으로 줄바꿈 제외)
echo -n "abc" | base64
YWJj
문제는 문자열이 꽤 긴 경우에 결과를 변수에 저장해서 작업하는 경우다. 리눅스에서 베이스64 인코딩/디코딩을 해 주는 프로그램 base64에서 자동적으로 줄바꿈을 해서 출력을 여러줄로 만들기 때문이다.
# 긴 문자열에 대한 베이스64 인코딩 예시
echo "Hello. This is John speaking. May I speak to Jane please?" | base64
SGVsbG8uIFRoaXMgaXMgSm9obiBzcGVha2luZy4gTWF5IEkgc3BlYWsgdG8gSmFuZSBwbGVhc2U/
Cg==
위의 예시에 나온 결과를 입출력 리다이렉션(I/O redirection)으로 파일에 저장한다면 별 문제가 없을 것이나, 만약 길이가 긴 문자열을 베이스64 인코딩해서 이것을 변수에 할당해서 다른 작업에 활용해야 한다면 여러 줄로 출력되는 것을 한줄로 바꿀 필요가 있다.
base64 버전에 따라 줄바꿈 앞에 '/' 문자가 있는 경우도 있고 없는 경우도 있으므로, 시험 삼아 임의의 긴 문자열을 한번 인코딩해서 결과를 확인해 보자. 어쨌든 위의 예시에는 '/' 문자가 있는 경우다.
해결책은 간단하다. tr을 이용해서 줄바꿈을 공백으로 바꾼 후에, sed를 이용해서 바뀐 부분('/ ')을 제거하면 된다. tr과 sed의 조합은 이전 게시물을 참고하자. 여기로
# 긴 문자열에 대한 베이스64 인코딩. 출력을 한줄로
echo "Hello. This is John speaking. May I speak to Jane please?" | base64 | tr '\n' ' ' | sed 's/\/ //g'
SGVsbG8uIFRoaXMgaXMgSm9obiBzcGVha2luZy4gTWF5IEkgc3BlYWsgdG8gSmFuZSBwbGVhc2UCg==
# 베이스64 디코딩
echo "SGVsbG8uIFRoaXMgaXMgSm9obiBzcGVha2luZy4gTWF5IEkgc3BlYWsgdG8gSmFuZSBwbGVhc2UCg==" | base64 -d
Hello. This is John speaking. May I speak to Jane please?
'리눅스' 카테고리의 다른 글
리눅스에서 URL인코딩/디코딩 (0) | 2023.08.07 |
---|---|
리눅스에서 특정 사용자/그룹에 대한 ssh 접속 허가/제한 (0) | 2023.08.04 |
리눅스에서 ftp 사용자의 상위 디렉토리 접근 차단(vsftpd) (0) | 2023.08.04 |
데비안/우분투 계열 리눅스 배포판의 시스템 기본 bash 설정 파일 (0) | 2023.08.04 |
chsh - 리눅스에서 로그인 셸(login shell) 변경하기 (0) | 2023.08.04 |