Как подписать документ электронной подписью с помощью Python?

Чтобы подписать документ электронной подписью в Python, нужно использовать библиотеку cryptography. Вот пример кода:

from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.asymmetric import utils
from cryptography.hazmat.primitives.serialization import load_pem_private_key

def sign_document(private_key, document):
    signature = private_key.sign(
        document,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        utils.Prehashed(hashes.SHA256())
    )
    return signature

# Загрузка приватного ключа
with open('private_key.pem', 'rb') as key_file:
    private_key = load_pem_private_key(
        key_file.read(),
        password=None
    )

# Подписание документа
document = b'My document'
signature = sign_document(private_key, document)

# Вывод подписи
print(signature.hex())

Перед использованием этого кода, убедитесь, что у вас есть приватный ключ в формате PEM. Замените имя файла "private_key.pem" на соответствующее.

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

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

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

1. PyCryptodome

PyCryptodome является популярной библиотекой Python для криптографических операций. Она предоставляет возможность генерации и проверки электронной подписи. Для использования PyCryptodome убедитесь, что он установлен в вашей среде.


from Cryptodome.Hash import SHA256
from Cryptodome.PublicKey import RSA
from Cryptodome.Signature import pkcs1_15

# Создание ключей
private_key = RSA.generate(2048)
public_key = private_key.publickey()

# Хеширование документа
document = b"Содержимое документа"
hash = SHA256.new(document)

# Подписание документа
signature = pkcs1_15.new(private_key).sign(hash)

# Проверка подписи
try:
    pkcs1_15.new(public_key).verify(hash, signature)
    print("Подпись действительна.")
except (ValueError, TypeError):
    print("Подпись недействительна.")

2. Python Cryptography

Еще одна популярная библиотека Python для криптографических операций - Python Cryptography. Она также предоставляет возможность генерации и проверки электронной подписи.

Установите библиотеку Python Cryptography, если ее нет в вашей среде перед выполнением примеров кода.


from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding, rsa

# Создание ключей
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)
public_key = private_key.public_key()

# Хеширование документа
document = b"Содержимое документа"
hash = hashes.SHA256()
hasher = hashes.Hash(hash, default_backend())
hasher.update(document)
digest = hasher.finalize()

# Подписание документа
signature = private_key.sign(
    digest,
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)

# Проверка подписи
try:
    public_key.verify(
        signature,
        digest,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        hashes.SHA256()
    )
    print("Подпись действительна.")
except InvalidSignature:
    print("Подпись недействительна.")

3. OpenSSL

Третий подход - использование команд операционной системы с OpenSSL для подписания документа.

Для выполнения команд OpenSSL из Python можно использовать модуль subprocess.


import subprocess

# Подписание документа
subprocess.run([
    "openssl",
    "dgst",
    "-sha256",
    "-sign",
    "private_key.pem",
    "-out",
    "signature.bin",
    "document.txt"
])

# Проверка подписи
subprocess.run([
    "openssl",
    "dgst",
    "-sha256",
    "-verify",
    "public_key.pem",
    "-signature",
    "signature.bin",
    "document.txt"
])

Заключение

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

Видео по теме

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

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

Как Поставить Подпись в Word документе | Как Подписать документ Онлайн

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

Как сделать приблизительно равно python: 5 простых шагов с примерами 😄

🔐 Как присвоить переменной несколько значений python

🔍 Как найти повторяющиеся слова в списке python? Простой способ и легкий уровень сложности

Как подписать документ электронной подписью с помощью Python?

🤖 Как создать виртуального ассистента на Python: пошаговое руководство

🐍Как писать на Python в Xcode - легкое руководство для начинающих📝

🐍 Как подключить Питон: простая инструкция для начинающих