Использование pycryptodome или криптографии в python 3.6. Как этого добиться? - PullRequest
0 голосов
/ 11 марта 2020

Представьте себе следующее сообщение:

"Это сообщение для подписанного"

У меня есть необходимость подписать этот образец сообщения, используя "pycryptodome" или "cryptography" в Python 3.6 со следующими стандартами:

  • Формат: x.509;
  • Кодировка: UTF-8;
  • Кодировка: Base64;
  • PKCS1 v1.5;
  • Размер: 1024 бита;
  • Формат сообщения: SHA-1;

У меня есть требуемый "privatekey.pem", но у меня нет знаю, как это сделать в pycryptodome или криптографии.

ОБНОВЛЕНО: я нашел этот пример кода, но все еще не знаю, является ли это правильным способом достижения того, что мне нужно, на основе стандартов, определенных в исходном сообщении. Пример кода (для pycryptodome):

from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA1
import base64
from base64 import b64encode, b64decode

key = open('privatekey.pem', "r").read()
rsakey = RSA.importKey(key)
signer = PKCS1_v1_5.new(rsakey)
digest = SHA1.new()
data = 'This the message to be signed'
digest.update(b64decode(data))
sign = signer.sign(digest)
doc = base64.b64encode(sign)
print(doc)

Я вижу, что я получаю подпись в 172 символа га sh, но мне нужен профессиональный совет, чтобы узнать, соответствует ли это стандартам, которые я описал, и является ли это правильным способ сделать это.

1 Ответ

2 голосов
/ 11 марта 2020

Вот фрагмент кода, адаптированный со страницы соответствующей документации :

from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA1
from Crypto.PublicKey import RSA
from base64 import b64encode

message = 'This the message to be signed'
key = RSA.import_key(open('private_key.der').read())
h = SHA1.new(message)
signature = pkcs1_15.new(key).sign(h)
print(b64encode(signature))
...