Использование pycryptodome или криптографии в Python 3.6. Как этого добиться?

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

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

Мне нужно подписать это примерное сообщение, используя «pycryptodome» или «cryptography» в Python 3.6 со следующими стандартами:

  • Формат: х.509;
  • Кодировка: UTF-8;
  • Кодировка: Base64;
  • ПККС1 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-символьный хэш подписи, но мне нужен профессиональный совет, чтобы узнать, соответствует ли это стандартам, которые я описал, и является ли это правильным способом сделать это.


person pmatos    schedule 11.03.2020    source источник
comment
Ваша спецификация заполнения не имеет никакого смысла. OEAP — это дополнение шифрования, а не дополнение подписи. Для подписи вы можете использовать PSS или PKCS#1 v1.5.   -  person mat    schedule 11.03.2020
comment
Спасибо @мат. Это совершенно новое для меня, и мне очень хотелось бы увидеть пример кода знака.   -  person pmatos    schedule 11.03.2020
comment
Не забудьте дать правильную спецификацию того, что вы хотите. В противном случае никто не сможет дать вам образец.   -  person mat    schedule 11.03.2020
comment
Дорогой @mat, еще раз спасибо. Я отредактировал спецификации и надеюсь, что теперь они верны. Не могли бы вы проверить?   -  person pmatos    schedule 11.03.2020


Ответы (1)


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

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))
person mat    schedule 11.03.2020