파이썬과 암호화 라이브러리 비교 및 사용 예제

암호화는 개인 정보와 데이터를 보호하기 위해 중요한 요소입니다. 파이썬은 다양한 암호화 기능을 제공하는 라이브러리를 가지고 있으며, 이를 활용하여 데이터를 안전하게 보호할 수 있습니다. 이번 글에서는 파이썬에서 자주 사용되는 몇 가지 암호화 라이브러리를 비교하고, 각 라이브러리의 사용 예제를 살펴보겠습니다.

1. hashlib 라이브러리

hashlib는 파이썬의 기본 라이브러리로, 다양한 해시 함수를 제공합니다. 해시 함수는 임의의 크기의 데이터를 고정된 크기의 해시 값으로 변환하는데 사용됩니다. 일반적으로 암호화보다는 데이터 무결성을 확인하는 용도로 주로 사용됩니다.

import hashlib

# 문자열을 MD5 해시로 변환
data = "Hello, world!"
md5_hash = hashlib.md5(data.encode()).hexdigest()

# 문자열을 SHA256 해시로 변환
sha256_hash = hashlib.sha256(data.encode()).hexdigest()

print("MD5 해시:", md5_hash)
print("SHA256 해시:", sha256_hash)

2. cryptography 라이브러리

cryptography 라이브러리는 파이썬에서 암호화와 관련된 기능을 제공하는 완전한 패키지입니다. 대칭키 암호화, 비대칭키 암호화, 메시지 인증 코드 등 다양한 암호화 알고리즘을 지원합니다.

대칭키 암호화

from cryptography.fernet import Fernet

# 대칭키 생성
key = Fernet.generate_key()

# 대칭키로 암호화 객체 생성
cipher = Fernet(key)

# 원문
data = "Hello, world!".encode()

# 암호화
encrypted = cipher.encrypt(data)

print("암호화된 데이터:", encrypted)

# 복호화
decipher = Fernet(key)
decrypted = decipher.decrypt(encrypted)

print("복호화된 데이터:", decrypted.decode())

비대칭키 암호화 (RSA)

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend

# 비밀키 생성
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)

# 공개키 추출
public_key = private_key.public_key()
private_key_pem = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption()
)
public_key_pem = public_key.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
)

print("비밀키:")
print(private_key_pem.decode())

print("공개키:")
print(public_key_pem.decode())

마치며

위 예제들은 파이썬에서 자주 사용되는 암호화 라이브러리 중 일부를 소개한 것입니다. 라이브러리 선택은 사용하는 암호화 방식과 목적에 따라 달라질 수 있으며, 각 라이브러리의 문서를 참고하여 적합한 기능과 알고리즘을 선택하는 것이 중요합니다.

해당 내용은 Python hashlibcryptography 공식 문서를 참고하였습니다.

#암호화 #파이썬