Как расшифровать ключ publi c в pyCryptodome (Python 3.7) - PullRequest
0 голосов
/ 12 апреля 2020

Я знаю, что этот вопрос задавали бесчисленное количество раз, но либо другие, которые задавали его, были недостаточно ясны, либо это просто невозможно (хотя никто этого не говорил), в любом случае никто никогда не давал четкого ответа (возможно, с кодом). Итак: я пытаюсь создать криптовалюту, но это просто для удовольствия, поэтому мне не нужно, чтобы она была супер-безопасной, и я хотел бы использовать RSA для проверки подлинности пользователя, я шифрую сообщение транзакции с помощью закрытого ключа и затем я отправляю сообщение вместе с зашифрованной версией, а затем, когда мне нужно проверить, я запрашиваю ключ publi c и расшифровываю. Теперь возникает проблема: по-видимому, для расшифровки нужен закрытый ключ (чего я, очевидно, не могу иметь), в то время как математически это прекрасно работает без него. Есть ли способ обойти это? То, что работает аналогично, но не является RSA, тоже подойдет.

1 Ответ

1 голос
/ 13 апреля 2020

Я нашел способ с более эффективным и безопасным методом, вот код (взятый непосредственно из документации PKCS1_v1_5): В следующем примере показано, как закрытый ключ RSA (загруженный из файла) можно использовать для вычисления подпись сообщения:

>>> from Crypto.Signature import pkcs1_15
>>> from Crypto.Hash import SHA256
>>> from Crypto.PublicKey import RSA
>>>
>>> message = 'To be signed'
>>> key = RSA.import_key(open('private_key.der').read())
>>> h = SHA256.new(message)
>>> signature = pkcs1_15.new(key).sign(h)

На другом конце получатель может проверить подпись (и, следовательно, подлинность сообщения) с помощью соответствующего открытого ключа c RSA:

>>> key = RSA.import_key(open('public_key.der').read())
>>> h = SHA.new(message)
>>> try:
>>>     pkcs1_15.new(key).verify(h, signature)
>>>     print "The signature is valid."
>>> except (ValueError, TypeError):
>>>    print "The signature is not valid."

Надеюсь, это будет полезно, если здесь нет ссылки на саму страницу: https://pycryptodome.readthedocs.io/en/latest/src/signature/pkcs1_v1_5.html

...