RSA 암호화 파일 저장 및 파일 복호화 예제
글. 오상문 sualchi@daum.net
# RSA 암호화 파일 저장하기
# 미리 C:/public_key/rsa_public.pem 파일을 생성하고나서 이 예제를 실행함.
# RSA 공개키 비밀키 만들기 게시물 참조)
from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES, PKCS1_OAEP
with open('/temp/encrypted_data.bin', 'wb') as out_file:
recipient_key = RSA.import_key(open('C:/public_key/rsa_public.pem').read())
session_key = get_random_bytes(16)
cipher_rsa = PKCS1_OAEP.new(recipient_key)
out_file.write(cipher_rsa.encrypt(session_key))
cipher_aes = AES.new(session_key, AES.MODE_EAX)
data = b'Python Cipher Program'
ciphertext, tag = cipher_aes.encrypt_and_digest(data)
out_file.write(cipher_aes.nonce)
out_file.write(tag)
out_file.write(ciphertext)
# 암호화 파일을 읽어서 복호화하기
# 미리 C:/private_key/private_rsa_key.pem 파일을 생성하고나서 이 예제를 실행함.
# RSA 공개키 비밀키 만들기 게시물 참조
code = 'nooneknows' # RSA 키 만들 때 사용한 코드 값
with open('/temp/encrypted_data.bin', 'rb') as fobj:
private_key = RSA.import_key(open('C:/private_key/private_rsa_key.pem').read(), passphrase=code)
enc_session_key, nonce, tag, ciphertext = [ fobj.read(x) for x in (private_key.size_in_bytes(), 16, 16, -1) ]
cipher_rsa = PKCS1_OAEP.new(private_key)
session_key = cipher_rsa.decrypt(enc_session_key)
cipher_aes = AES.new(session_key, AES.MODE_EAX, nonce)
data = cipher_aes.decrypt_and_verify(ciphertext, tag)
print(data) # b'Python Cipher Program'
<이상>
'Python 활용' 카테고리의 다른 글
파이썬 문자열에서 한글 초성 얻어내기 (0) | 2018.06.01 |
---|---|
윈도우에서 파이썬 Numpy와 Matplotlib 모듈 설치 (0) | 2017.11.24 |
파이썬3, RSA 공개키 비밀키 생성하여 파일에 저장하기 (0) | 2017.10.17 |
파이썬3 문자열 암호화 복호화 DES 예제 (0) | 2017.10.17 |
파이썬3 해시값 구하여 출력하는 예제 (0) | 2017.10.17 |