반응형

 

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'

 

 

<이상>


 

 

반응형

+ Recent posts