2023. 7. 20. 12:22ㆍpython
`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)를 고려해야 할 수 있습니다.
'python' 카테고리의 다른 글
pyqt6에서 폼간 데이터 전송방법 (0) | 2023.07.25 |
---|---|
python UI tools (0) | 2023.07.25 |
파이썬에서 사용하는 암호와 복호화 에 대한 최신 기능 (0) | 2023.07.20 |
파이썬의 object의 특수메서드 (0) | 2023.05.15 |
key를 이용한 배열의 합산 (1) | 2023.05.08 |