Python PyCryptodome Алгоритм цифровой подписи с DSS
в Python Pycryptodome пример по умолчанию для DSA-DSS Привет, ребята. Я задал этот вопрос, но, это не умно, я удалил в своем профиле и просто спрашиваю из учетной записи моих друзей.
Проблема в том, что я пытался использовать шифрование с открытым ключом, подпись, проверку, так что...
До завтра все будет хорошо, но я сталкиваюсь с DSA-DSS ECDSA. Если вы посмотрите на картинку, я думаю, что есть какая-то проблема, на которую я нацелен. Они делают "подписывающего" с закрытым ключом в DSS, но они не используют его в подписи. Вместо этого он использует ключевой знак.Even на проверочном уровне, (на рисунке не появляется) они вызывают открытый ключ из файла "PEM" и пытаются проверить без вызова DSS new() снова.
Так что, если вы сравните мой код и картинку, вы заметите, что я хочу сказать...
from Crypto.PublicKey import DSA
from Crypto.Signature import DSS
from Crypto.Hash import SHA256
key = DSA.generate(2048)
publickey=key.publickey()
message = b"Hello"
hash_obj = SHA256.new(message)
signer = DSS.new(key, 'fips-186-3')
signature = signer.sign(hash_obj)
Итак, здесь я пытаюсь проверить сообщение. Я не создал объект снова, и я вызвал открытый ключ из ключа, который я показал выше.
pkey=DSS.new(publickey,'fips-186-3')
pkey.verify(hash_obj,signature)
False
Итак, как вы можете видеть, я получил "Ложь" . Я попробовал это на ECDSA - DSS снова вернул то же самое. так что если вы получили то, что я хочу сделать, пожалуйста, помогите, что я хочу?
1 ответ
Документы для verify
метод сказать:
Повышает: ValueError - если подпись не является подлинной
и всегда возвращаюсь False
если это успешно.
Поэтому вместо проверки возвращаемого значения вам нужно проверить, вызывает ли метод исключение.
В общем, вы захотите что-то вроде:
try:
pkey.verify(hash_obj,signature)
valid = True
except ValueError:
valid = False
В вашем коде тот факт, что он не вызывает исключение, показывает, что проверка прошла успешно и подпись действительно действительна.