Как уменьшить длину сообщения, зашифрованного с помощью гибридного шифрования - PullRequest
0 голосов
/ 18 мая 2018

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

, если вход был "привет", то длина выходного сообщения будет 586, и дважды, если, еслисообщение больше

Вот функция шифрования, которую я использую:

def encrypt(username, msg):
    #get the reciever's public key
    f = open("{}.pem".format(username)) # a.salama.pem
    recipient_key = RSA.import_key(f.read())
    f.close()

    # Encrypt the session key with the reciever's public RSA key
    cipher_rsa = PKCS1_OAEP.new(recipient_key)

    # Encrypt the data with the AES128 session key
    session_key = get_random_bytes(16)  
    cipher_aes = AES.new(session_key, AES.MODE_EAX)
    ciphertext, tag = cipher_aes.encrypt_and_digest(msg)

    #finishing your processing
    encrypted_data = cipher_rsa.encrypt(session_key) + cipher_aes.nonce + tag +  ciphertext 
    encrypted_data = hexlify(encrypted_data).decode("utf-8")
    return encrypted_data

1 Ответ

0 голосов
/ 18 мая 2018

В заголовке есть фиксированное количество дополнительных байтов, независимо от объема зашифрованного текста.Это видно из вашей строки кода

encrypted_data = cipher_rsa.encrypt(session_key) + cipher_aes.nonce + tag +  ciphertext 

В этих дополнительных данных будет доминировать сеансовый ключ, зашифрованный RSA.Более экономичный выбор - ECIES с использованием хорошо известной 256-битной эллиптической кривой.

Однако у вас также есть расширение данных из-за кодирования.Вы выбираете кодировку в шестнадцатеричном формате, которая удваивает объем данных.Более эффективное и хорошо поддерживаемое кодирование - это кодировка base64.Кодировка Base64 расширяет данные в 4/3 раза.Наиболее экономичным является избегать кодирования вообще, а просто хранить и передавать необработанные байты.Вам нужно только закодировать данные, если они будут проходить через канал, который не может обрабатывать двоичные данные.

...