signieren Ich versuche, eine funktional äquivalente Signatur mit Python und der Cryptography-Bibliothek zu PHP openssl_pkey_get_private
und openssl_sign
mit einem SHA1-Hash zu implementieren. Ich habe gelesen, dass PHP PKCS1v15 Padding verwendet, also versuche ich es auch zu benutzen. Mein Code ist:Python-Kryptographie: Kann nicht mit privatem RSA-Schlüssel unter Verwendung von PKCS1v15 Padding
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()
)
Executing ergibt sich:
---------------------------------------------------------------------------
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.
Welche Version der Kryptographiebibliothek verwenden Sie? –
Wir haben es mit den Versionen 1.4 und 1.5 versucht. – Marii
Haben Sie versucht mit PSS-Polsterung? Es wird auch nicht empfohlen, PKCS1v15-Padding für eine neuere Anwendung aufgrund von Schwachstellen zu verwenden. Siehe https://cryptography.io/en/latest/hazmat/primitives/asymmetric/rsa/#cryptography.hazmat.primitives.asymmetric.padding.PKCS1v15 –