#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:
Проблема заключалась в кодировании зашифрованного текста, он не был правильно закодирован при методе шифрования.