Client-serveur : donnees cryptees xor

Contenu du snippet

le serveur envoie un message crypté avec XOR, la clé est le n°de port
le cliet recois les données et les décrypte avec la clé (le port)

serveur arguments : PORT MESSAGE
client arguments : HOTE PORT

activez le serveur avec un message et faite telnet [127.0.0.1] [n°port] : il recoit les données...cryptées

le cryptage n'est pa super puissant mai c juste pour donné l'idée

Source / Exemple :


//#######################SERVEUR#########################"
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

int main(int argv,char*argc[])
{
 system("clear");

 int sock,nsock, cle = atoi(argc[1]), n;
 struct sockaddr_in sin;

 char msg[255], buffer[255];
 strcpy(msg, argc[2]);
  for(n = 0; n < (strlen(msg) + 1); n++)
  {
   buffer[n] = msg[n] ^ cle;
  }

 sin.sin_family      = AF_INET;
 sin.sin_addr.s_addr = INADDR_ANY;
 sin.sin_port        = htons(atoi(argc[1]));
 bzero(&(sin.sin_zero),8);

 sock = socket(AF_INET,SOCK_STREAM,0);

 printf(" port %s en écoute...\n", argc[1]);
 bind(sock, (struct sockaddr *)&sin, sizeof(struct sockaddr));
 listen(sock,50);

  while(1)
  {
   int sin_size = sizeof(struct sockaddr_in);
   nsock = accept(sock,(struct sockaddr *)&sin,&sin_size);
   printf("  connection de %s sur le port %s\n",inet_ntoa(sin.sin_addr),argc[1]);
   send(nsock,buffer,sizeof(buffer),0);
  }

 close(nsock);
 return 0;
}

//#######################CLIENT##############################
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

int main(int argv,char*argc[])
{
 system("clear");

 char buffer[255], mot[255];
 int sock, cle = atoi(argc[2]), n;
 struct sockaddr_in sin;

 sin.sin_family      = AF_INET;
 sin.sin_addr.s_addr = inet_addr(argc[1]);
 sin.sin_port        = htons(atoi(argc[2]));
 bzero(&(sin.sin_zero),8);

 sock = socket(AF_INET,SOCK_STREAM,0);

 printf(" tentative de connection sur %s / %s...\n", argc[1], argc[2]);
 connect(sock,(struct sockaddr*)&sin,sizeof(struct sockaddr));
 printf("  connecté %s / %s\n", argc[1], argc[2]);

 recv(sock,buffer,sizeof(buffer),0);
    for(n = 0; n < (strlen(buffer) + 1); n++)
    {
      mot[n] = buffer[n] ^ cle;
    }
 printf("  buffer: %s\n", mot);

 close(sock);
 return 0;
}

Conclusion :


gcc serveur.c -o serveur
gcc client.c -o client

serveur 1245 coucou!
client 127.0.0.1 1245

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.