[파이썬] MySQL 데이터베이스 암호화
암호화는 중요한 데이터를 안전하게 보호하기 위한 필수적인 요소입니다. 특히 데이터베이스에 저장된 정보는 민감할 수 있으므로 암호화하는 것이 중요합니다. 이번 글에서는 Python을 사용하여 MySQL 데이터베이스를 암호화하는 방법을 알아보겠습니다.
1. PyCryptodome 설치하기
먼저, PyCryptodome 라이브러리를 설치해야 합니다. 이 라이브러리는 다양한 암호화 알고리즘을 지원하여 데이터를 안전하게 암호화하고 복호화할 수 있도록 도와줍니다.
pip install pycryptodome
2. 암호화 키 생성하기
암호화를 위해 사용할 키를 생성해야 합니다. 이 키는 암호화와 복호화에 사용되며, 반드시 안전한 곳에 보관해야 합니다.
from Crypto.Random import get_random_bytes
# 32바이트 길이의 키 생성
key = get_random_bytes(32)
3. 데이터베이스 연결 설정
MySQL 데이터베이스에 연결하기 위해 mysql-connector-python
패키지를 설치합니다.
pip install mysql-connector-python
다음으로, 데이터베이스에 연결하는 코드를 작성합니다.
import mysql.connector
# 데이터베이스 연결 설정
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="mydatabase"
)
4. 데이터 암호화 및 저장
이제 데이터를 암호화하고 MySQL 데이터베이스에 저장하는 코드를 작성합니다.
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
# 암호화 함수 정의
def encrypt_data(data, key):
cipher = AES.new(key, AES.MODE_ECB)
cipher_data = cipher.encrypt(pad(data.encode(), AES.block_size))
return cipher_data
# 데이터베이스에 데이터 저장
def save_encrypted_data(data):
cursor = mydb.cursor()
encrypted_data = encrypt_data(data, key)
sql = "INSERT INTO table_name (data) VALUES (%s)"
val = (encrypted_data,)
cursor.execute(sql, val)
mydb.commit()
5. 데이터 복호화
암호화된 데이터를 복호화하는 코드는 다음과 같습니다.
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
# 복호화 함수 정의
def decrypt_data(encrypted_data, key):
cipher = AES.new(key, AES.MODE_ECB)
decrypted_data = unpad(cipher.decrypt(encrypted_data), AES.block_size)
return decrypted_data.decode()
# 데이터베이스에서 데이터 불러오기
def get_decrypted_data():
cursor = mydb.cursor()
sql = "SELECT data FROM table_name"
cursor.execute(sql)
result = cursor.fetchone()
decrypted_data = decrypt_data(result[0], key)
return decrypted_data
이제 위의 코드를 사용하여 암호화된 데이터를 복호화하고, 데이터베이스에서 안전하게 저장된 데이터를 사용할 수 있습니다.
암호화는 데이터 보호를 위해 필수적인 요소입니다. Python에서 MySQL 데이터베이스를 암호화할 수 있는 이러한 기능을 활용하여 중요한 정보를 안전하게 보호할 수 있습니다.