[파이썬] 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 데이터베이스를 암호화할 수 있는 이러한 기능을 활용하여 중요한 정보를 안전하게 보호할 수 있습니다.