Интеграция SQL-запросов с Python и автоматическое шифрование данных

Интеграция SQL-запросов с Python для автоматизации шифрования данных может быть полезной для защиты конфиденциальной информации в базе данных. В этом примере мы рассмотрим, как можно использовать Python для выполнения SQL-запросов и шифрования данных перед их вставкой в базу данных, а также дешифрования данных при их извлечении.

Шаги для интеграции SQL-запросов с Python

  1. Установите необходимые библиотеки: Потребуется установить pysqlite3 или mysql-connector-python для работы с базами данных SQLite или MySQL, соответственно. Для шифрования данных можно использовать библиотеку cryptography.

  2. Подключитесь к базе данных: Используйте библиотеку для подключения к вашей базе данных.

  3. Шифруйте данные перед вставкой: Шифруйте данные с помощью Python перед вставкой в базу данных.

  4. Дешифруйте данные при извлечении: Извлекайте данные из базы данных и дешифруйте их с помощью Python.

Пример: Использование SQLite и библиотеки Cryptography

Установка библиотек

pip install pysqlite3 cryptography

Пример кода

import sqlite3
from cryptography.fernet import Fernet

# Генерация ключа для шифрования
key = Fernet.generate_key()
cipher_suite = Fernet(key)

# Функция для шифрования данных
def encrypt_data(data):
    return cipher_suite.encrypt(data.encode())

# Функция для дешифрования данных
def decrypt_data(encrypted_data):
    return cipher_suite.decrypt(encrypted_data).decode()

# Подключение к базе данных SQLite
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# Создание таблицы для хранения данных
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    username TEXT NOT NULL,
    password TEXT NOT NULL
)
''')
conn.commit()

# Пример данных
username = "JohnDoe"
password = "SuperSecretPassword"

# Шифрование пароля
encrypted_password = encrypt_data(password)

# Вставка данных в таблицу
cursor.execute('''
INSERT INTO users (username, password) VALUES (?, ?)
''', (username, encrypted_password))
conn.commit()

# Извлечение данных из таблицы
cursor.execute('SELECT id, username, password FROM users')
rows = cursor.fetchall()

# Дешифрование и вывод данных
for row in rows:
    user_id, user_name, encrypted_pass = row
    decrypted_password = decrypt_data(encrypted_pass)
    print(f"ID: {user_id}, Username: {user_name}, Password: {decrypted_password}")

# Закрытие соединения
conn.close()

Пояснение примера

  1. Генерация ключа и создание объекта шифрования:

    • Fernet.generate_key() генерирует уникальный ключ для шифрования.

    • cipher_suite = Fernet(key) создаёт объект шифрования с использованием сгенерированного ключа.

  2. Функции для шифрования и дешифрования данных:

    • encrypt_data(data) принимает строку, шифрует её и возвращает зашифрованный результат.

    • decrypt_data(encrypted_data) принимает зашифрованные данные, дешифрует их и возвращает исходную строку.

  3. Подключение к базе данных и создание таблицы:

    • Подключение к SQLite базе данных с помощью sqlite3.connect('example.db').

    • Создание таблицы users для хранения данных пользователей, если она ещё не существует.

  4. Шифрование пароля и вставка данных:

    • Пароль шифруется перед вставкой в базу данных с использованием функции encrypt_data.

    • Зашифрованный пароль вставляется в базу данных.

  5. Извлечение и дешифрование данных:

    • Данные извлекаются из таблицы users.

    • Каждый зашифрованный пароль дешифруется с использованием функции decrypt_data перед выводом на экран.

Этот пример демонстрирует, как интеграция SQL-запросов с Python и использование библиотеки Cryptography позволяет автоматически шифровать и дешифровать данные в базе данных.

Last updated