✍️ Как подписать файл цифровой подписью с помощью Python: пошаговое руководство

Как подписать файл цифровой подписью в Python?

Для того чтобы подписать файл цифровой подписью в Python, вам понадобится использовать модуль PyCryptodome.

Вот простой пример кода, который позволит вам подписать файл:


from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256

def sign_file(private_key_path, file_path, signature_path):
    # Загрузка приватного ключа
    with open(private_key_path, 'r') as f:
        private_key = RSA.import_key(f.read())

    # Хеширование содержимого файла
    file_hash = SHA256.new()
    with open(file_path, 'rb') as f:
        while True:
            chunk = f.read(1024)
            if len(chunk) == 0:
                break
            file_hash.update(chunk)

    # Подписывание хеша файла
    signer = PKCS1_v1_5.new(private_key)
    signature = signer.sign(file_hash)

    # Сохранение цифровой подписи в файл
    with open(signature_path, 'wb') as f:
        f.write(signature)

sign_file('private_key.pem', 'file.txt', 'signature.txt')

Обратите внимание, что вам нужно будет иметь частный ключ RSA (в данном случае в формате PEM) и указать путь к этому ключу в переменной private_key_path. Вы также должны указать путь к файлу, который вы хотите подписать, и путь к месту, где будет сохранена цифровая подпись.

Надеюсь, это помогло! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.

Детальный ответ

Как подписать файл цифровой подписью с помощью Python

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

Шаг 1: Установка библиотеки

Перед тем, как приступить к созданию цифровой подписи, нам нужно установить библиотеку, которая обеспечивает соответствующие функции. В Python мы будем использовать библиотеку PyCryptodome, которая является веткой PyCrypto и предоставляет более современные возможности.


pip install pycryptodome

Шаг 2: Генерация ключей

Прежде чем мы сможем подписать файл, нам нужно сгенерировать ключи - приватный и публичный ключи. Приватный ключ используется для создания подписи, а публичный ключ - для ее проверки. В Python можно сгенерировать ключи, используя модуль Crypto.PublicKey. Вот пример генерации ключей:


from Crypto.PublicKey import RSA

private_key = RSA.generate(2048)
public_key = private_key.publickey()

with open("private_key.pem", "wb") as f:
    f.write(private_key.export_key())
    
with open("public_key.pem", "wb") as f:
    f.write(public_key.export_key())

Этот код сгенерирует приватный ключ и сохранит его в файле "private_key.pem", а также сгенерирует публичный ключ и сохранит его в файле "public_key.pem". Убедитесь, что вы сохраняете эти ключи в безопасном месте, так как они используются для проверки подлинности подписи.

Шаг 3: Подписание файла

Теперь, когда у нас есть ключи, мы можем подписать файл. В Python для этого мы будем использовать модуль Crypto.Signature. Вот пример кода для подписи файла:


from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256

def sign_file(private_key_path, file_path, signature_path):
    with open(private_key_path, "rb") as f:
        private_key = RSA.import_key(f.read())
    
    with open(file_path, "rb") as f:
        file_data = f.read()
    
    hash_obj = SHA256.new(file_data)
    signer = pkcs1_15.new(private_key)
    signature = signer.sign(hash_obj)
    
    with open(signature_path, "wb") as f:
        f.write(signature)

В этом примере мы определяем функцию sign_file, которая принимает путь к приватному ключу, путь к файлу, который мы хотим подписать, и путь, по которому мы сохраняем подпись. Функция открывает ключ и файл, вычисляет хеш файла, подписывает хеш с помощью приватного ключа и сохраняет подпись в заданном файле.

Шаг 4: Проверка подписи

Теперь мы можем проверить подпись файла, используя публичный ключ. Для этого мы также будем использовать модуль Crypto.Signature. Вот пример кода для проверки подписи:


def verify_signature(public_key_path, file_path, signature_path):
    with open(public_key_path, "rb") as f:
        public_key = RSA.import_key(f.read())
    
    with open(file_path, "rb") as f:
        file_data = f.read()
    
    with open(signature_path, "rb") as f:
        signature = f.read()
    
    hash_obj = SHA256.new(file_data)
    verifier = pkcs1_15.new(public_key)
    
    try:
        verifier.verify(hash_obj, signature)
        return True
    except (ValueError, TypeError):
        return False

В этом примере мы определяем функцию verify_signature, которая принимает путь к публичному ключу, путь к файлу и путь к подписи. Функция открывает ключ, файл и подпись, вычисляет хеш файла, и затем проверяет подпись с помощью публичного ключа. Функция возвращает True, если проверка успешна, и False в противном случае.

Заключение

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

Видео по теме

Как подписать документ электронно-цифровой подписью (ЭЦП)

Как подписать документ электронной цифровой подписью.

Как подписать программу цифровой подписью

Похожие статьи:

Что означает функция while в Python? 🤔

🔎 Как найти количество гласных букв в слове Python? Детальный гид с примерами и объяснениями

Как распечатать массив в Python: простой метод с использованием функции print()

✍️ Как подписать файл цифровой подписью с помощью Python: пошаговое руководство

Какая разница между for и while в Python?

🔎 Что означает name в Python? Расшифровка и примеры использования

📚 Лучшие места, где учиться Python! 🐍 От начинающих до профессионалов