Получите правильный вывод из расшифрованного текста - PullRequest
0 голосов
/ 02 февраля 2019

Я работаю над шифрованием и дешифрованием, используя открытый и закрытый ключи в python. Я зашифровал текст и пытаюсь расшифровать его, однако, я получаю реальное сообщение в конце некоторого случайного текста!могу ли я получить помощь, чтобы понять, что я делаю неправильно?

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKCS1_v1_5

msg = "supriya"
print("raw msg->", msg)
public_key_string = open("key.pem","r").read()
keyPub = RSA.importKey(public_key_string) # import the public key
cipher = Cipher_PKCS1_v1_5.new(keyPub)
#print(cipher.encrypt.__doc__)
cipher_text = cipher.encrypt(msg.encode()) # now we have the cipher
'print("cipher text->", cipher_text)'

private_key_string = open("key2.py","r").read()
private_key = RSA.importKey(private_key_string)
print(private_key)
decrypted = private_key.decrypt(cipher_text)
print(decrypted)

Когда я пытаюсь print(decrypted), я получаю:

b"\x02\x1cL`(\xf8\xbb\x84Eg\xc2\xf2Z\xa7\xa3\x10\xd06\x9a\x05
\xbd\xd0\x9e$\x94\x89\xd4\x04M\x7f\xb8\xc4\x01k\xf9\x9a\xb6&
\x07\xd6jbw\x9c>\x08\xdb\xe5\xda@\x9b\\\xa5Pz\xe8\x94s4+\xee
]'W.T+\xb6\xd7\x19\x7f\x85tL\xe9J:\x08\xf7\xbd\xbd\xdc\x99ep
\xd5\xea\xf1[\xff\x8a\x1d\xd5#\xd8s\n\xec\xb5,\xde\x1dE\xe7
\x99\x1f(\xbfm=iu1 \xe4^\x18\x10\x06z'\xf4_\x1c\x88[D\xa5
\xe6J\xa8\xf1\x7f\xb4\xe3r\xad)\xcb\xa3\x06\xf9\xbea6A\xf32
\x99\xa3y\xf5\xa3[\xc4m\xa8;\xfa\xcdQc#\xc8\t\x8d\xf8\xcb8
\xadC\xb0\x1c\xe8\x8b\xfc\x9c\x87&K\xd4\xd8\x9c/`\xbd\x92\\
\xc2\xe0:\x13e\x8b\xc9\xd8,p{\xb1@\x80\xbf\xf50\xb8\x84a\x15
\x0cF\xe1\xa4\xea\r\x16\x12:e}Edc\x9e\xa4\xb8\x87u\x1e\xbf
\x17\xf8\\\xeb\x9e\x88\x7f^\xb7\xb1\xa7o{s\x00supriya"

1 Ответ

0 голосов
/ 02 февраля 2019

Вы использовали PKCS1v1.5 заполнение при шифровании.Это, вероятно, хорошо, поскольку люди, которые используют шифрование, обычно хотят и ожидают, что оно обеспечит безопасность и, в частности, конфиденциальность, а шифрование RSA без заполнения почти во всех случаях (по-видимому, в том числе и у вас) легко нарушается и не является безопасным.Ищите «учебник RSA» или «RSA no padding» в crypto.SX и security.SX для много вопросов и ответов о причинах.(Даже v1.5 не идеален; в некоторых ситуациях он остается уязвимым для атаки с использованием адаптивного зашифрованного текста из-за Bleichenbacher, также описанного в этих стеках, и OAEP является лучшим в настоящее время стандартизированным заполнением. Но оставьте это в стороне.)

Но вы не использовали его для расшифровки.В результате ваше расшифрованное значение включает заполнение шифрования v1.5, которое представляет собой октет со значением 2, столько ненулевых случайных октетов, сколько необходимо для того, чтобы «закодированное сообщение» (EM), используемое в примитиве RSA, имело правильный размер, т.е.размер модуля и один нулевой октет, за которым следует открытый текст.Вы должны использовать PKCS1_v1_5 для расшифровки , как вы это сделали для шифрования (за исключением частного ключа).

...