2016-10-19 3 views
0

У меня есть простая программа C, которая больше похожа на сервер «Эхо», для этого я хочу использовать шифрование с следующим требованием,Как шифровать и расшифровывать char [] в C?

  1. Со стороны клиента после отправки обычного текста на сервер, клиент будет " зашифровать строку»с„предопределенным паролем“и храните его
  2. сервера получит простой текст, и зашифровать эту строку, используя предопределенный пароль и отправить его обратно
  3. клиента получают зашифрованный текст, сравнить его с зашифрованным текст на его стороне, и если оба совпадают, нет ошибки, еще покажите ошибку

пытался много вариантов, но здесь другие требований, которые держат неудачу,

  1. Нет внешних ЛИЭС зависимостей
  2. Зашифрованного текст должен быть печатями и быть Сохраняемыми в файл (HEX тоже отлично)
  3. Этот код работает очень часто (например, сервер чата). Поэтому нужно быть как можно быстрее, но не так просто догадаться.

Могу ли я, пожалуйста, получить помощь по заполнению этого кода, при этом зашифрованный текст должен быть в ASCII (или HEX).

Ниже приводится образец моего существующего кода,

НА КЛИЕНТА СТОРОНЕ

char *randomAllowchar = "abcdefghijklmnopqrstuvwxyz"; 
char plainStrToServer[30];  

// generating 20 char random string   
for (n = 0;n < 20;n++) { 
    key = rand() % 26;   
    plainStrToServer[n] = randomAllowchar[key]; 
} 

... other code to send this plainStrToServer to server side 

// Receiving response from server 
char server_reply[200]; 
if(recv(sock , server_reply , 200 , 0) < 0){ 
    ... 
} 

// comparing if server response matched with sent string 
if (strcmp(plainStrToServer,server_reply) != 0) { 
    // Error 
} 

ПО на стороне сервера

char buffer[30]; 
int rc1; 

while (1) { 
    rc1 = read(fd, buffer, sizeof(buffer)); 
    // write back original received message back to client 
    write(fd , buf, strlen(buffer));  
} 
+1

См. Алгоритм XTEA. Это очень коротко. Кроме того, необходимо будет добавить CBC и Base64/uuencode, чтобы сделать вывод текста. – i486

+2

Правило номер один при выполнении шифрования: используйте библиотеку. Есть так много способов сделать это неправильно так, как вы никогда не слышали, вы никогда не получите его действительно надежным. Конечно, это не проблема, если у вас только низкий уровень безопасности. –

+0

Благодарим вас за ответ. XTEA кажется хорошим вариантом, поскольку он может быть скомпилирован независимо. Любой пример использования этого https://tls.mbed.org/api/xtea_8c_source.html в текущем контексте клиентского сервера будет полезен. Я по-прежнему новичок в том, как преобразовать зашифрованный ответ на HEX, а затем отправить его обратно клиенту (с сервера). Спасибо – Rahul

ответ

0

Если вы можете вообще отдохнуть «no extern al dependencies ", вы должны использовать libsodium. Я описал, как это сделать здесь немного: Simply encrypt a string in C. Для чат-программы вам, вероятно, нужна опция 3 (шифрование с открытым ключом).

Причина в следующем: вы не можете разумно реализовать любые надежных алгоритмов шифрования самостоятельно, чтобы это было безопасно. Libsodium - относительно небольшая зависимость, которая надежно реализует абстракции высокого уровня по алгоритмам, которые в настоящее время считаются быстрыми и безопасными.

Все, что вы делаете short настоящих алгоритмов шифрования - просто обфускация и легко читается даже для малобюджетных злоумышленников. Например, шифратор (или цезарский) шифрует информацию о шаблонах в текстовом виде. Это особенно плохо, если ваш обычный текст является языком: всего несколько (может быть, 100) слов, отправленных и «зашифрованных», злоумышленник, который может обнюхать трафик, сможет расшифровать всю прошлую и будущую связь, угадывая правильный ключ.

Смежные вопросы