Код RSA, написанный с помощью PyCrypto, не работает с PyCryptodome - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь запустить две простые функции, которые я написал для PyCrypto с PyCryptodome.Вот функции со связанными определениями членов класса:

import Crypto.PublicKey.RSA as RSA

class MyRSA():    
    n = "123..." # these are actually very long string...
    p = "345..."
    u = "567..."
    q = "789..."
    e = long(65537)
    t = (long(n), e, long(d), long(p), long(q), long(u))
    key = RSA.construct(t)

    def DecryptText(self, text):            
        chunk_size = 128
        enc_vec = [text[i:i+chunk_size] for i in range(0, len(text), 
                                                       chunk_size)]
        plain_text = ''
        for x in enc_vec:
            plain_text +=  MyRSA.key.decrypt(x)        
        return plain_text

    def EncryptText(self, text):
        chunk_size = 128
        text_vec = [text[i:i+chunk_size] for i in range(0, len(text), 
                                                        chunk_size)]
        enc_text = ''
        for x in text_vec:
            enc_text += MyRSA.key.encrypt(x, '')[0]            
        return enc_text

Две функции EncryptText и DecryptText используют методы PyCrypto encrypt и decrypt, которые больше не поддерживаются в PyCryptodome (ошибка NotImplemented возникает, когда они вызываютсяпо внешнему коду).Может ли кто-нибудь помочь мне преобразовать их в код, совместимый с PyCryptodome?Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Это не тот вопрос, который вы задали, но имейте в виду, что в вашем EncryptText есть существенная криптографическая слабость.Вы разделяете свои сообщения на куски и шифруете каждое из них.Этот метод примерно такой же, как в режиме ECB симметричных шифрований, и поэтому имеет тот же недостаток:

a) Злоумышленник может переупорядочить фрагменты сообщения или поменять их местами между различными шифрованиями.

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

0 голосов
/ 04 марта 2019

Основополагающим компонентом шифрования RSA является заполнение.Pycrypto использовался для предоставления необработанных методов decrypt и encrypt для ключевого объекта RSA (тех, которые вы используете), но это неверно и небезопасно, поскольку они не реализуют никакого дополнения.

Вместо этого,Вы должны использовать модуль Crypto.Cipher.PKCS1_OAEP (единственный вариант в pycryptodome), который надежно заботится о заполнении.

...