Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: создание защищенного канала предачи данных по протоколу TCP и симметричного шифр  (Прочитано 1628 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн parliamentUA

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
В итоге вот что склеили, само пишет и читает:
#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>
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;
}
int main(int argc, char **argv)
{
int sockfd;
int n,len;
char sendline[1000],recvline[1000];
struct sockaddr_in servaddr,cliaddr;
for(int i=0;i<1000;i++)
recvline[i]='\0';
if(argc!=2)
{ printf("Usage: a.out <IP address>\n");
exit(1);
}
if((sockfd = socket(PF_INET, SOCK_DGRAM, 0))<0)
{ perror(NULL);
exit(1);
}
bzero(&cliaddr,sizeof(cliaddr));
cliaddr.sin_family=AF_INET;
cliaddr.sin_port=htons(0);
cliaddr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sockfd,(struct sockaddr *) &cliaddr,
sizeof(cliaddr))<0)
{ perror(NULL);
close(sockfd);
exit(1);
}

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(51000);
if(inet_aton(argv[1],&servaddr.sin_addr)==0)
{ printf("Invalid IP address\n");
close(sockfd);
exit(1);
}

printf("String => ");
fgets(sendline,1000,stdin);
//if(sendto(sockfd,sendline,strlen(sendline)+1,0,(struct sockaddr *) &servaddr,sizeof(servaddr))<0)
if (write_enc(sockfd,sendline,strlen(sendline)+1))
{ perror(NULL);
close(sockfd);
exit(1);
}

//if((n=recvfrom(sockfd,recvline,1000,0,(struct sockaddr *) NULL, NULL))<0)
if(read_enc(sockfd,recvline,1000))
{ perror(NULL);
close(sockfd);
exit(1);
}

printf("%s\n",recvline);
close(sockfd);
return 0;
}

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
И что? Работает? О_о
по всем параметрам это просто напросто не должно работать вообще.

Оффлайн HelenAquaMast

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
    • mpoisk.net
тоже такая проблема была спасибо - помогли разобраться

 

Страница сгенерирована за 0.058 секунд. Запросов: 26.