http://bahndal.egloos.com/422524
[bash: openssl] 파일 암호화 리눅스
리눅스에서 파일을 암호화하고 싶다면 openssl을 활용할 수 있다.
터미널창에서 아래와 같이 입력한다.
openssl aes-256-cbc -in my_file.txt -out my_file.enc
my_file.txt 파일을 미국의 암호화 표준인 AES로 암호화하여 my_file.enc라는 이름으로 저장하는 예이다.
위와 같이 실행하면 암호를 입력하라는 메시지가 나오는데, 암호를 정해서 넣어주면 되겠다.
(대소문자, 수자, 특수기호 등을 섞어서 최소 15자 이상이 되도록 정하는 것을 추천)
암호화하면 암호화된 파일이 새로 생기고 원본 파일도 그대로 있으므로 원본 파일은 rm 명령으로 지워주자.
rm my_file.txt
아래와 같이 -d 옵션을 주면 원래 파일로 복원할 수 있다.
암호화된 my_file.enc를 복원하여 my_file.txt로 저장하는 예이다.
openssl aes-256-cbc -d -in my_file.enc -out my_file.txt
마찬가지로 복원을 위해서는 암호를 입력해 주면 된다.
shell script에서 파일 암호화를 사용할 때, 암호를 특정 규칙에 의해 자동으로 생성하거나
한번 암호를 입력 받아서 여러개의 파일을 작업해야 할 상황이 있다면 아래와 같은 방식이 유용하다.
password_str="my_password"
echo -n "$password_str" | openssl aes-256-cbc -in my_file.txt -out my_file.enc -pass stdin
위의 예는 password_str 변수에 저장된 암호를 echo 명령으로 출력하고
openssl에서는 -pass stdin 옵션을 추가해서 암호가 자동으로 입력되도록 하는 것이다.
엔터가 포함되지 않도록 echo 명령에 -n 옵션을 사용했다.
암호는 파이프(|)에 의해 openssl 명령의 입력으로 넘어가기 때문에 암호가 실제로 터미널창 화면에 출력되지는 않는다.
복원은 앞에서 예시한 바와 같이 -d 옵션을 사용하면 된다.
echo -n "$password_str" | openssl aes-256-cbc -d -in my_file.enc -out my_file.txt -pass stdin
암호를 자동으로 입력하는 다른 방법으로 아래의 예시를 보자.
openssl aes-256-cbc -in my_file.txt -out my_file.enc -pass pass:my_password
위와 같은 방식은 비추천이다. 암호화가 진행되고 있는 도중에 ps 명령으로 프로세스 목록을 보면 암호가 그대로 드러나기 때문이다.
echo 명령과 조합하는 방식이 더 낫다.