Как подписать документ электронной подписью с помощью 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. Вы можете выбрать подход, который наиболее подходит для ваших потребностей и требований безопасности. Убедитесь, что вы правильно генерируете ключи, хешируете документы и проверяете подписи, чтобы обеспечить целостность и подлинность ваших электронных документов.