Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2012, 23:11   #1
satanclaus
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 15
По умолчанию создание защищенного канала предачи данных по протоколу TCP и симметричного шифр

Здраствуйте, нужно написать курсовую на даную тему "создание защищенного канала предачи данных по протоколу TCP и симметричного шифрования данных в ОС LINUX". Есть клиент и сервер для низащищенного

клиент
Код:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char **argv)
{   
   int sockfd;
   int n;
   int i;
   char sendline[1000],recvline[1000];
   struct sockaddr_in servaddr;
   if(argc!=2)
   {   printf("Usage: a.out <IP address>\n");
      exit(1);
   }
   bzero(sendline,1000);
   bzero(recvline,1000);
   if((sockfd = socket(PF_INET, SOCK_STREAM, 0))<0)
   {   perror(NULL);
      exit(1);
   }
   bzero(&servaddr,sizeof(servaddr));
   servaddr.sin_family=AF_INET;
   servaddr.sin_port=htons(7);
   if(inet_aton(argv[1],&servaddr.sin_addr)==0)
   {   printf("Invalid IP address\n");
      close(sockfd);
      exit(1);
   }
   
   if(connect(sockfd,(struct sockaddr *) &servaddr,
      sizeof(servaddr))<0)
   {   perror(NULL);
      close(sockfd);
      exit(1);
   }
   
   
   for(i=0;i<3;i++)
   {
      printf("String => ");
      fflush(stdin);
      fgets(sendline,1000,stdin);
      if((n=write(sockfd,sendline,
            strlen(sendline)+1))<0)
      {   perror("Can\'t write\n");
         close(sockfd);
         exit(1);
      }
      
      if((n=read(sockfd,recvline,999))<0)
      {   perror("Can\'t read\n");
         close(sockfd);
         exit(1);
      }
      
      printf("%s\n",recvline);
   }
   close(sockfd);
   return 0;
}

сервер

Код:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{   
   int sockfd,newsockfd;
   int clilen;
   int n;
   char line[1000];
   struct sockaddr_in servaddr,cliaddr;
   if((sockfd = socket(AF_INET, SOCK_STREAM, 0))<0)
   {   perror(NULL);
      exit(1);
   }
   bzero(&servaddr,sizeof(servaddr));
   servaddr.sin_family=AF_INET;
   servaddr.sin_port=htons(51000);
   servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
   if(bind(sockfd,(struct sockaddr *) &servaddr,
         sizeof(servaddr))<0)
   {   perror(NULL);
      close(sockfd);
      exit(1);
   }

   if(listen(sockfd,5)<0)
   {   perror(NULL);
      close(sockfd);
      exit(1);
   }

   while(1)
   {   clilen=sizeof(cliaddr);
      if((newsockfd=accept(sockfd,
         (struct sockaddr *) &cliaddr, &clilen))<0)
      {   perror(NULL);
         close(sockfd);
         exit(1);
      }

      while((n=read(newsockfd,line,999))>0)
      {   if((n=write(newsockfd,line,
            strlen(line)+1))<0)
         {   perror(NULL);
            close(sockfd);
            close(newsockfd);
            exit(1);
         }
      }

      if(n<0)      
      {   perror(NULL);
         close(sockfd);
         close(newsockfd);
         exit(1);
      }
      
      close(newsockfd);      
   }

   return 0;
}

еще есть простой пример шифрования написаного другим человеком.
По сути нужно заменить все функции read/write на свои read_enc/write_enc


Код:
    const char key[] = "oskopdfgowj4r9tg8wj0tg93j4958gh304958hy304985ghsoeirugh049g78h34059g87h340958gh30948hg03euirhg0w";
     
    ssize_t read_enc(int fd, void *buf, size_t count) {
        static size_t total_read = 0;
        ssize_t n = read(fd, buf, count);
        if (n > 0) {
            for (ssize_t i = 0; i < n; ++i, ++total_read) {
                buf[i] ^= key[total_read % sizeof(key)];
            }
        }
        return n;
    }
     
    ssize_t write_enc(int fd, void *buf, size_t count) {
        static size_t total_write = 0;
        for (ssize_t i = 0; i < count; ++i, ++total_write) {
            buf[i] ^= key[total_write % sizeof(key)];
        }
        ssize_t n = write(fd, buf, count);
        for (ssize_t i = count; i > n; --i, --total_write) {
            buf[i-1] ^= key[total_write % sizeof(key)];
        }
        return n;
    }
Вопрос как ето можно получше реализовать? И какие инклуды еще нужны для примера выше. Реализация вроде з помощью openssl
satanclaus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание ШИФР программы novich_38 Помощь студентам 8 19.12.2011 15:48
Разработка защищенного контейнера данных (язык любой) Hackett Помощь студентам 2 06.12.2011 12:56
Не получается создать удалённое сетевое подключение между двумя компами по протоколу TCP anyx Свободное общение 3 31.05.2011 20:55
Данные через сокет по tcp/ip протоколу a.haener JavaScript, Ajax 1 04.07.2009 08:14
Создание защищенного сервиса miae Общие вопросы Delphi 5 21.01.2008 18:54