Ich habe den folgenden Code, der perfekt zum Signieren von Strings funktioniert. Allerdings muss ich jetzt programmatisch unterschreiben und eine Signatur für eine Datei in der gleichen Weise zu erhalten, wie ich OpenSSL würde auf der KommandozeileSignieren von Dateien/Dateiobjekten mit Python und Pyopenssl
e.g. openssl dgst -sha1 –sign key.pem -out sig1 file.tar
.
import OpenSSL
from OpenSSL import crypto
import base64
key_file = open("key.pem", "r")
key = key_file.read()
key_file.close()
password = "password"
if key.startswith('-----BEGIN '):
pkey = crypto.load_privatekey(crypto.FILETYPE_PEM, key, password)
else:
pkey = crypto.load_pkcs12(key, password).get_privatekey()
print pkey
data = "data"
sign = OpenSSL.crypto.sign(pkey, data, "sha256")
print sign
data_base64 = base64.b64encode(sign)
print data_base64
Wenn öffnet eine Datei und versuchen zu unterschreiben:
with open('file.tar', 'r') as the_file:
sign = OpenSSL.crypto.sign(pkey, the_file, "sha256")
the_file.write(sign)
the_file.close()
OpenSSL einen Fehler wirft:
sign = OpenSSL.crypto.sign(pkey, the_file, "sha256")
TypeError: must be string or read-only buffer, not file
Wie kann das Dateiobjekt unterschreiben?