Cryptologie en réseau
- Notions d'échange sur un réseau.
2 ordinateurs du réseau Palissy sont reliés par câble Ethernet.
Pour échanger sur le réseau, il faut choisir un port de communication, par exemple: 8000 - 12345...
Nous devons créer un client et un serveur. Le message chiffré circulera de l'un à l'autre.
127.0.0.1 est une adresse IP local qui permet de créer le client et le serveur sur la même machine.
L'adresse du serveur prof est 127.17.244.43
Pour obtenir notre adresse IP il faut:
Ouvrir un document texte avec le bloc note et y insérer:
"ipconfig/all
pause"
l'enregistrer sous le nom "commande.cmd"
Quand on l’exécute l'adresse ip de notre PC correspond à Adresse IPV4 (172.17.244.201 par exemple)
Une autre méthode pour obtenir l'adresse IP.
Il faut aller ouvrir "Windows PowerShell" dans Menu démarrer>Accesoires>Windows PowerShell
Maintenant on peut taper ipconfig.
Voici le code du Client:
import processing.net.*; Client c; String input; int data[]; int i =0; String secret = "VIDE"; boolean coder = true; int decal = 3; PImage img; PImage img1; Caesar message = new Caesar(3); char ch; void setup() { size(450, 255); background(204); stroke(0); frameRate(10); // Slow it down a little // Connect to the server's IP address and port c = new Client(this, "172.17.244.43", 12345); // Replace with your server's IP and port img = loadImage("cryptology.jpg"); img1 = loadImage("cgenial3.jpg"); fill(0); image(img,0,0,450,270); image(img1,350,0,100,50); text("Alphabet 1 = " + new String(message.texte_code), 20,80); text("Alphabet 2 = " + new String(message.texte_clair),20,120); } void draw() { if (keyPressed ==true){println ("true"); secret = ""+key; secret = message.codage(secret); text("Code",20,140); text(secret,20 +i,160); ch= secret.charAt(0); println(ch); c.write(ch); secret = message.decodage(secret); text(secret,20 + i,220); text("Message secret",20,200); fill(0); text ("Methode de César à compléter",20,20); i=i+20; } // Receive data from server if (c.available() > 0) { input = c.readString(); text(input,i,100); i=i+20; } } public class Caesar { //Déclaration d'une nouvelle classe appelée Caesar char[] alpha = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; //Déclaration de la variable alpha et affectation à la variable alpha des valeurs 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' protected char[] texte_code = new char[26]; //Affectation de la variable texte_code à de nouvelles valeurs protected char[] texte_clair = new char[26]; //Affectation de la variable texte_clair à de nouvelles valeurs Caesar(Integer decalage) { //Déclaration de la valeur decalage for (int i=0; i < 26; i++) texte_code[i] = alpha[(i + decalage) % 26]; for (int i=0; i < 26; i++) texte_clair[texte_code[i] - 'A'] = alpha[i]; } //Déclaration de boucles for String codage(String secret) { char[] message =secret.toCharArray(); for (int i=0; i < message.length; i++) if (Character.isUpperCase(message[i])) message[i] = texte_code[message[i] - 'A']; return new String(message); } //Affectation de la variable message à secret.toCharArray, puis boucle for, puis retour à la nouvelle variable message. String decodage(String secret) { char[] message = secret.toCharArray(); for (int i=0; i < message.length; i++) if (Character.isUpperCase(message[i])) message[i] = texte_clair[message[i] - 'A']; return new String(message); } //Déclaration de la chaîne de caractères décodage, associée à la chaîne de caractère secret.Affectation de la variable message à secret.toCharArray, puis boucle for, puis retour à la nouvelle variable message. }
Voici le code du serveur:
import processing.net.*; Server s; Client c; String input; int data[]; int i =0; String secret = "VIDE"; boolean coder = true; int decal = 3; PImage img; PImage img1; Caesar message = new Caesar(3); char ch; void setup() { size(450, 255); background(204); stroke(0); frameRate(10); // Slow it down a little s = new Server(this, 12345); // Start a simple server on a port img = loadImage("cryptology.jpg"); img1 = loadImage("cgenial3.jpg"); fill(0); image(img,0,0,450,270); image(img1,350,0,100,50); text("Alphabet 1 = " + new String(message.texte_code), 20,80); text("Alphabet 2 = " + new String(message.texte_clair),20,120); textSize(20); text("SERVEUR",200,40); textSize(12); text("Message décodé",20,180); text("Message codé",20,140); } void draw() { if (keyPressed ==true){println ("true");println(key); s.write(key); } // Receive data from client c = s.available(); if (c != null) { input = c.readString(); stroke(0); textSize(12); text(input,i,160); secret = message.decodage(input); text(secret,i,200); i=i+20; } } public class Caesar { //Déclaration d'une nouvelle classe appelée Caesar char[] alpha = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; //Déclaration de la variable alpha et affectation à la variable alpha des valeurs 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' protected char[] texte_code = new char[26]; //Affectation de la variable texte_code à de nouvelles valeurs protected char[] texte_clair = new char[26]; //Affectation de la variable texte_clair à de nouvelles valeurs Caesar(Integer decalage) { //Déclaration de la valeur decalage for (int i=0; i < 26; i++) texte_code[i] = alpha[(i + decalage) % 26]; for (int i=0; i < 26; i++) texte_clair[texte_code[i] - 'A'] = alpha[i]; } //Déclaration de boucles for String codage(String secret) { char[] message =secret.toCharArray(); for (int i=0; i < message.length; i++) if (Character.isUpperCase(message[i])) message[i] = texte_code[message[i] - 'A']; return new String(message); } //Affectation de la variable message à secret.toCharArray, puis boucle for, puis retour à la nouvelle variable message. String decodage(String secret) { char[] message = secret.toCharArray(); for (int i=0; i < message.length; i++) if (Character.isUpperCase(message[i])) message[i] = texte_clair[message[i] - 'A']; return new String(message); } //Déclaration de la chaîne de caractères décodage, associée à la chaîne de caractère secret.Affectation de la variable message à secret.toCharArray, puis boucle for, puis retour à la nouvelle variable message. }
