Криптография Python: Невозможно подписать с закрытым ключом RSA, используя заполнение PKCS1v15

Я пытаюсь реализовать функционально эквивалентную подпись с помощью Python и библиотеки криптографии для PHP openssl_pkey_get_private а также openssl_sign используя хэш SHA1. Я читал, что PHP использует заполнение PKCS1v15, поэтому я тоже пытаюсь это использовать. Мой код:

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

pk = open('key.pem', 'rb')
key = load_pem_private_key(pk.read(), password=None, backend=default_backend())
message = b'hello world'
signature = key.sign(
message,
padding.PKCS1v15,
hashes.SHA1()
)

Выполнение этого приводит к:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-ef3db8a6f4a8> in <module>()
3     message,
4     padding.PKCS1v15,
----> 5     hashes.SHA1()
6 )

/home/vagrant/virtualenvs/test/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/rsa.py in sign(self, data, padding, algorithm)
613
614     def sign(self, data, padding, algorithm):
--> 615         signer = self.signer(padding, algorithm)
616         signer.update(data)
617         signature = signer.finalize()

/home/vagrant/virtualenvs/test/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/rsa.py in signer(self, padding, algorithm)
550
551     def signer(self, padding, algorithm):
--> 552         return _RSASignatureContext(self._backend, self, padding, algorithm)
553
554     def decrypt(self, ciphertext, padding):

/home/vagrant/virtualenvs/test/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/rsa.py in __init__(self, backend, private_key, padding, algorithm)
170
171         if not isinstance(padding, AsymmetricPadding):
--> 172             raise TypeError("Expected provider of AsymmetricPadding.")
173
174         self._pkey_size = self._backend._lib.EVP_PKEY_size(

TypeError: Expected provider of AsymmetricPadding.

3

Решение

Оператор isinstance указывает на то, что padding.PKCS1v15 должен быть экземпляром вместо самого типа (класса). Это означает, что экземпляр объекта должен быть создан путем вызова конструктора.

Для этого добавьте круглые скобки, т.е. padding.PKCS1v15(),

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]