Реализация гибридной криптосистемы в .net. Ошибка Указанный ключ не является допустимым размером для этого алгоритма

Я пытаюсь реализовать гибридную криптосистему, как указано в https://en.wikipedia.org/wiki/Hybrid_cryptosystem< /а>

На данный момент я реализовал следующий алгоритм

private void button1_Click(object sender, EventArgs e)
        {
            CspParameters cspParams = new CspParameters { ProviderType = 1 };
            RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(1024, cspParams);
            string publicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false));
            string privateKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(true));
            string symmericKey = "Kamran12";
            txtEncryptedData.Text = EncryptData(txtInputData.Text, symmericKey);
            string encryptedsymmetrickey = EncryptData(symmericKey, publicKey); //error line
            //string decryptsymmetrickey = encryptedsymmetrickey + privateKey;

            //string decrypteddata = encryptedData + decryptsymmetrickey;

        }

        public string EncryptData(string data, string key)
        {
            string encryptedData = null;

            byte[] buffer = Encoding.UTF8.GetBytes(data);

            DESCryptoServiceProvider desCryptSrvckey = new DESCryptoServiceProvider
            {
                Key = new UTF8Encoding().GetBytes(key)
            };
            desCryptSrvckey.IV = desCryptSrvckey.Key;

            using (MemoryStream stmCipherText = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(stmCipherText, desCryptSrvckey.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(buffer, 0, buffer.Length);
                    cs.FlushFinalBlock();


                    encryptedData = Encoding.UTF8.GetString(stmCipherText.ToArray());
                }
            }
            return encryptedData;
        }

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


person Kamran Shahid    schedule 07.02.2017    source источник
comment
Ваш publicKey больше, чем допустимые 64 бита, которые ожидаются для этого метода шифрования. Вот почему вы получаете исключение. Это 200 байт, что составляет 1600 бит.   -  person florianbaer    schedule 07.02.2017
comment
Это правда, но тот факт, что для переноса ключа DES с помощью RSA используется неправильный алгоритм/комбинация ключей, является основной ошибкой.   -  person Maarten Bodewes    schedule 07.02.2017
comment
Откатился на последнюю версию. Это сайт вопросов и ответов, а не сайт отладки. Не обновляйте свой код (частичными) решениями.   -  person Maarten Bodewes    schedule 08.02.2017


Ответы (1)


Вы пытаетесь зашифровать с использованием (небезопасного) алгоритма DES с открытым ключом RSA. Это всегда будет ошибкой, DESCryptoServiceProvider не принимает ключи RSA. Для этого вам понадобится RSACryptoServiceProvider.

Вы можете рассмотреть возможность использования конкретной библиотеки, которая уже реализует гибридную криптографию (PGP, CMS или один из проприетарных протоколов). В зависимости от того, как вы это сделаете, ваше решение может в конце концов работать, но оно не будет безопасным.

person Maarten Bodewes    schedule 07.02.2017
comment
DES как шифр. Тск. - person Maarten Bodewes; 07.02.2017
comment
Можете ли вы предложить исправления в текущей реализации. Не могу найти ничего на github и т. д. относительно гибридной криптографии. - person Kamran Shahid; 07.02.2017
comment
Я думал, что это очевидно, но я скорректировал ответ. Не упорядочивайте байты, если это строго не требуется. Строки хороши для читаемого человеком текста; нет необходимости все время преобразовывать все в строку и обратно. Ключи DES должны быть закодированы в байты. - person Maarten Bodewes; 07.02.2017
comment
Спасибо, Мартен. Хотя было сделано много разработок, но это что-то новое в мире криптографии. Попробую с RSACryptoServiceProvider - person Kamran Shahid; 07.02.2017
comment
Помните, что в криптомире есть одно отличие: цель состоит в том, чтобы сделать его безопасным, а не заставить его работать. У вас может быть реализация, которая работает как шарм (в большинстве случаев, если вам не повезет) и небезопасна. Вам нужно знать, что вы делаете для разработки криптовалюты. - person Maarten Bodewes; 07.02.2017
comment
Маартен, теперь я застрял в последней точке. Иметь возможность шифровать данные с помощью симметричного ключа, шифровать, а затем расшифровывать симметричный ключ. Ожидается расшифровка данных - person Kamran Shahid; 08.02.2017
comment
Отлично, так где ты застрял? - person Maarten Bodewes; 08.02.2017
comment
На финальном шаге. Зашифрованные данные не расшифровываются. получение ошибки: длина данных для расшифровки недействительна - person Kamran Shahid; 08.02.2017
comment
Пожалуйста, опубликуйте новый вопрос с включенным кодом. Не обновляйте этот. И, пожалуйста, хотя бы примите и или проголосуйте за этот ответ. - person Maarten Bodewes; 08.02.2017
comment
Ok. Вопрос опубликован stackoverflow.com/questions/42110224/ - person Kamran Shahid; 08.02.2017
comment
Моя вина. Это было просто из-за того, что текстовое поле (которое я забавляю для целей тестирования) вызвало у меня проблему. При сохранении данных в файле после шифрования и во время расшифровки я извлекаю данные через файл, это работает как шарм. Большое спасибо, Мартен, за руководство. Теперь я могу проверить, в какой момент я могу использовать AES, поскольку кто-то предположил, что это лучше из-за его безопасности. - person Kamran Shahid; 08.02.2017