В Python я бы использовал пакет cryptography
.
Показанные примеры можно найти здесь: https://cryptography.io/en/latest/hazmat/primitives/asymmetric/dsa/
Вы можете создать закрытый ключ со следующим кодом.
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import dsa
private_key = dsa.generate_private_key(key_size=2048, backend=default_backend())
Это создаст ключ для генерации подписи ваших данных.
Я бы предложил вам 2048 бит или более для длины ключа.
Следующий код является примером для подписи сообщения.
from cryptography.hazmat.primitives import hashes
data = b"this is some test data"
signature = private_key.sign(data, hashes.SHA256())
Если вы хотите проверить подпись, вам нужно получить открытый ключ из закрытого ключа.
public_key = private_key.public_key()
public_key.verify(signature, data, hashes.SHA256())
Этот открытый ключ соответствует вашему личному ключу и используется для проверки подписей, которые были созданы с вашим личным ключом.
Не сосредотачивайтесь на каждой строке слишком много, у каждого языка и библиотеки будут разные методы и способы делать в основном одно и то же.
Теперь для полного примера вы можете просто соединить приведенные выше примеры.
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import dsa
private_key = dsa.generate_private_key(key_size=2048, backend=default_backend())
data = b"this is some test data"
signature = private_key.sign(data, hashes.SHA256())
public_key = private_key.public_key()
public_key.verify(signature, data, hashes.SHA256())
public_key.verify()
вызовет исключение InvalidSignature
, если подпись окажется недействительной (Источник: https://cryptography.io/en/latest/hazmat/primitives/asymmetric/dsa/#verification).