2016-09-03 3 views
3

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. 
+0

Welche Version der Kryptographiebibliothek verwenden Sie? –

+0

Wir haben es mit den Versionen 1.4 und 1.5 versucht. – Marii

+0

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 –

Antwort

3

Der Betreiber isinstance zeigt an, dass padding.PKCS1v15 Bedürfnisse eine Instanz anstelle des Typs (Klasse) selbst sein. Das bedeutet, dass die Objektinstanz durch Aufrufen des Konstruktors erstellt werden sollte.

Dazu fügen Sie Klammern hinzu, d. H. padding.PKCS1v15().

Verwandte Themen