[python] PyCrypto를 사용한 RSA 암호화 및 복호화

소개

RSA는 대표적인 공개키 암호화 알고리즘 중 하나로, 데이터를 안전하게 전송하거나 보관할 때 사용됩니다. 이번 글에서는 Python의 PyCrypto 라이브러리를 사용하여 RSA 암호화와 복호화를 구현하는 방법에 대해 알아보겠습니다.

PyCrypto 설치

먼저, PyCrypto를 설치해야 합니다. 다음 명령어를 사용하여 PyCrypto 패키지를 설치할 수 있습니다.

pip install pycrypto

RSA 키 생성

RSA 암호화를 사용하기 위해서는 첫 번째로 RSA 키 쌍을 생성해야 합니다. 공개키로 암호화를 수행하고, 개인키로 복호화를 수행하기 위해 필요합니다.

from Crypto.PublicKey import RSA

# RSA 키 쌍 생성
def generate_key_pair():
    key = RSA.generate(2048)
    private_key = key.export_key()
    public_key = key.publickey().export_key()
    return private_key, public_key

위 코드에서 generate_key_pair() 함수를 호출하면 RSA 키 쌍이 반환됩니다. 이때 private_key는 개인키, public_key는 공개키를 나타냅니다.

암호화 및 복호화

RSA 암호화에서는 공개키를 사용하여 데이터를 암호화하고, 개인키를 사용하여 암호문을 복호화합니다.

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# 데이터 암호화
def encrypt(data, public_key):
    key = RSA.import_key(public_key)
    cipher = PKCS1_OAEP.new(key)
    ciphertext = cipher.encrypt(data)
    return ciphertext

# 암호문 복호화
def decrypt(ciphertext, private_key):
    key = RSA.import_key(private_key)
    cipher = PKCS1_OAEP.new(key)
    data = cipher.decrypt(ciphertext)
    return data

위 코드에서 encrypt() 함수를 호출하면 데이터를 암호화한 암호문이 반환되고, decrypt() 함수를 호출하면 암호문을 복호화한 데이터가 반환됩니다. 이때 public_key는 공개키, private_key는 개인키를 나타냅니다.

예시

암호화와 복호화를 실제로 사용해보는 예시를 살펴보겠습니다.

private_key, public_key = generate_key_pair()
message = b"Hello, World!"

# 데이터 암호화
ciphertext = encrypt(message, public_key)
print("암호문: ", ciphertext)

# 암호문 복호화
decrypted_message = decrypt(ciphertext, private_key)
print("복호화된 데이터: ", decrypted_message)

위 코드를 실행하면 데이터를 암호화하여 암호문을 생성한 후, 이를 다시 복호화하여 원래 데이터를 얻을 수 있습니다.

마무리

이번 글에서는 Python의 PyCrypto 라이브러리를 사용하여 RSA 암호화와 복호화를 구현하는 방법에 대해 알아보았습니다. RSA는 안전한 데이터 전송 및 보관을 위한 대표적인 암호화 알고리즘이므로, 필요한 경우에는 이를 적절히 활용하여 보안 강화에 기여할 수 있습니다.

참고 자료