библиотека криптографии python — ошибка значения: длина зашифрованного текста должна быть равна размеру ключа

#python #encryption #cryptography #rsa

#python #шифрование #криптография #rsa

Вопрос:

Я реализую алгоритм RSA с использованием библиотечной криптографии python, однако я остановился, когда возникло следующее исключение:

 ValueError: Ciphertext length must be equal to key size.
  

Из того, что я понял, это, по-видимому, является ограничением самой библиотеки, а не чем-то обычным для реализации других библиотек.

Это исключение возникает, когда я пытаюсь расшифровать ранее зашифрованное сообщение, но что я могу сделать, чтобы избежать этого? Когда я создаю открытый и закрытый ключи, я не могу знать длину зашифрованного текста (зашифрованного сообщения) Я получу позже… Действительно ли я могу это контролировать?

Я думаю, что проблема заключается в создании ключей, я пытался указать такое же количество битов в исходном расшифрованном сообщении в качестве аргумента для создания ключей с таким же количеством битов, но он по-прежнему вызывает то же исключение…

Я использовал это, чтобы узнать количество битов в исходном сообщении, может быть, я делаю это неправильно …?

 m = message
m.encode(encoding='UTF-8',errors='strict')
bits = len(m)*4*8
  

Редактировать:

Мой код очень длинный, потому что в нем есть и другие вещи, но я могу указать некоторые ключевые моменты

 privateKeySender , publicKeySender    = generateKeys(bits)
privatekeyReceptor, publickeyReceptor = generateKeys(bits)

ciphertext     = myencrypt(publickeyReceptor , message)
signature      = sign(ciphertext, publickeyReceptor )
decryptMessage = mydecrypt(ciphertext, privatekeyReceptor)
validation     = validateSignature(message,signature, publicKeySender)
  

исключение генерируется в методе decrypt

 def mydecrypt(ciphertext, privateKey):
    ciphertextD = base64.b64decode(ciphertext) if not isinstance(ciphertext, bytes) else ciphertext

    message= privateKey.decrypt(
                    ciphertextD,
                    padding.OAEP(
                            mgf=padding.MGF1(algorithm=hashes.SHA1()),
                            algorithm=hashes.SHA1(),
                            label=None
                    )
                )
    message= str(message)
    message.encode(encoding='UTF-8',errors='strict')
    return message
  

Комментарии:

1. Пожалуйста, опубликуйте код, ведущий к вашему исключению.

Ответ №1:

Проблема заключалась в кодировании зашифрованного текста, он не был правильно закодирован при методе шифрования.