pycryptodome 사용법 예제

2023. 7. 20. 12:22python

`pycryptodome`은 파이썬에서 암호화를 위한 인기 있는 라이브러리 중 하나입니다. 다음은 `pycryptodome`을 사용하여 AES 대칭키 암호화와 복호화를 수행하는 간단한 예제입니다. `pycryptodome` 라이브러리를 사용하기 전에, 먼저 해당 라이브러리를 설치해야 합니다.

먼저, 아래와 같이 `pycryptodome` 라이브러리를 설치합니다:

```bash
pip install pycryptodome
```

이제 AES 암호화와 복호화를 다음과 같이 수행할 수 있습니다:

```python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Util.Padding import pad, unpad
from base64 import b64encode, b64decode

# 암호화에 사용할 대칭키 생성
password = b"mysecretpassword"  # 바이트 형식으로 비밀키 지정
salt = get_random_bytes(16)  # 솔트 생성
key = PBKDF2(password, salt, dkLen=32)  # 비밀키 생성

# 암호화할 데이터
data = b"Hello, world!"

# AES 암호화
cipher = AES.new(key, AES.MODE_CBC)
ct_bytes = cipher.encrypt(pad(data, AES.block_size))

# 초기화 벡터(IV)와 암호화된 데이터를 합쳐서 전송 또는 저장
iv = b64encode(cipher.iv).decode('utf-8')
ct = b64encode(ct_bytes).decode('utf-8')
encrypted_text = iv + ":" + ct

print("암호화된 결과:", encrypted_text)

# 암호화된 데이터를 다시 복호화
iv, ct = encrypted_text.split(":")
iv = b64decode(iv)
ct = b64decode(ct)

cipher = AES.new(key, AES.MODE_CBC, iv)
pt = unpad(cipher.decrypt(ct), AES.block_size)

print("복호화된 결과:", pt.decode('utf-8'))
```

이 예제에서는 AES 대칭키 암호화를 사용하여 문자열 "Hello, world!"를 암호화하고 다시 복호화합니다. `Crypto.Cipher` 모듈에서 AES를 사용하여 암호화 및 복호화 객체를 생성하고, `Crypto.Random` 모듈에서 `get_random_bytes()` 함수를 사용하여 솔트를 생성합니다. `Crypto.Protocol.KDF` 모듈에서는 PBKDF2를 사용하여 비밀키를 생성합니다. `Crypto.Util.Padding` 모듈은 데이터를 패딩하고 언패딩하는 데 사용됩니다.

이 예제는 간단한 데모 용도로만 사용되며, 실제 애플리케이션에서는 암호화 키 관리, 안전한 솔트 생성, 인증 등 보안 사항에 주의하여 사용해야 합니다. 또한, CBC 모드의 경우, 적절한 초기화 벡터(IV)를 사용해야 하며, 보다 안전한 모드(예: GCM)를 고려해야 할 수 있습니다.