Introduction
어플리케이션을 개발할때 간혹 파일을 암호화 해야 하는 경우가 있습니다. 이번시간에는 파일을 암호화하는 방법중에서 가장 널리 이용되고 있는 RSA와 AES(DES)를 이용해 파일을 암호화 하고 복호화 하는 방법에 대해 소개합니다. 아래는 이번시간에 구현하게될 샘플 동영상입니다.
위 동영상의 시연 순서를 설명드리면 아래와 같습니다.
1. Generate Key버튼을 이용해 RSA키를 생성한다. (입력된 파일 명으로 개인키와 공개키가 생성)
2. Encrypt File버튼을 이용해 선택한 파일을 암호화한다. (선택한 파일과 동일한 폴더에 ".Encrypt" 확장자의 암호화된 파일이 생성)
3. Decrypt File버튼을 이용해 선택한 파일을 복호화한다. (선택한 파일과 동일한 폴더에 ".Decrypt" 확장자의 복호화된 파일이 생성)
4. ".Decrypt" 확장자의 파일을 원래 확장자로 변경하여 복호화가 정상적으로 이루어 졌는지 확인한다.
※ RSA의 경우 개인키로는 암호화/복호화가 모두 가능하지만 공개키로는 암호화만 가능합니다.
Encryption & Decryption Principles
이번시간에 구현한 샘플 프로그램의 동작원리는 아래와 같습니다.
먼저 암호화를 위해서 RSA로 생성한 개인키/공개키를 이용해 AES 또는 DES 대칭키를 암호화 합니다. 그리고 RSA로 암호화된 대칭키와 초기화 벡터를 암호화 결과 파일이 저장될 공간의 앞부분에 크기와 함께 저장합니다. 그리고 대칭키를 이용해 데이터를 암호화 를 진행합니다.
복호화는 이와 반대로 수행하면 됩니다. 암호화된 파일의 앞부분에서 암호화된 대칭키를 추출하고, 이를 RSA 개인키를 이용해 복호화 한다음 복호화된 대칭키를 이용해 암호화된 데이터를 복호화 합니다.
Create EncryptUtil
위에서 말씀드린 과정을 수행하기 위해서 위와 같은 기능을 가진 EncryptUtil클래스를 생성했습니다. EncryptFile 메서드와 DecryptFile 메서드는 SymmetricAlgorithm 타입을 받는 제너릭 메서드로 구현되어 있으며 사용하실 때에는 아래와 같이 AesCryptoServiceProvider 혹은 DESCryptoServiceProvider를 넘겨서 사용하시면됩니다.
아래는 이번시간에 사용한 샘플 코드의 전체 소스코드입니다. 포스팅과 관련해 궁금하신 점이나 문의사항은 댓글이나 메일로 주시면 답변드리겠습니다. 감사합니다.