C: DES проблема шифрования - PullRequest
       31

C: DES проблема шифрования

0 голосов
/ 17 августа 2011

Я искал примеры, как кодировать вещи в C, используя DES cypher и openssl заголовки, и я нашел это: http://www.codealias.info/technotes/des_encryption_using_openssl_a_simple_example

Код почти идеален, но я не очень разбираюсь в этом, и мои знания C на C не так велики, поскольку я использую его на микроконтроллерах PIC и AVR ...

В любом случае в коде:

printf("Clear text\t : %s \n",clear);
memcpy(encrypted,Encrypt(key,clear,sizeof(clear)), sizeof(clear));
printf("Encrypted text\t : %s \n",encrypted);
memcpy(decrypted,Decrypt(key,encrypted,sizeof(clear)), sizeof(clear));
printf("Decrypted text\t : %s \n",decrypted);

Как видите, sizeof (clear) используется в качестве размера строки ... проблема в том, что в примере мы знаем размер текстовой строки ... но когда я отправляю этот текст поверх сеть, которую другой компьютер не знает ...

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

Спасибо !!

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

Мир полон плохих систем безопасности, разработанных людьми, которые читают Прикладную криптографию.

Не отправляйте свои собственные 'зашифрованные вещи на проводе.Вам не хватает HMAC, вам не хватает протокола обмена ключами, вам не хватает протокола каркасной структуры (который является точным ответом на ваш вопрос «как узнать размер»).Просто используйте готовый протокол, такой как TLS / SSL. gnu-tls предлагает простой в использовании API для SSL / TLS, openssl также поддерживает его, но общеизвестно громоздок в использовании.Что бы вы ни делали, не начинайте писать свой собственный протокол, вы получите еще один сломанный протокол «шифрования» из-за плохого обмена ключами или «оптимизированного одноразового номера», или отсутствия подписи фрейма, или чего-то еще.

Вот простой пример использования gnu-tls: Простой пример клиента с использованием C ++ API

2 голосов
/ 17 августа 2011

В реализациях, которые я видел в DES, я только помню, что видел открытый и зашифрованный текст одинакового размера. Википедия, кажется, подтверждает это .Поскольку DES работает на 64-битных блоках, это будет происходить, поскольку код, реализующий DES, правильно дополняет ввод, чтобы соответствовать этим 64-битным границам.Фактически, это в значительной степени определение блочного шифра (именно это и есть DES).

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

Кроме того, я твердо согласен с замечанием Джереми о том, что DES является плохим выбором алгоритма шифрования для большинства ситуаций.Тройной DES или AES - намного лучшие варианты.

...