Cryptography:Algorithme de Feistel en JAVA \C
Luca
-
m-killer Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
m-killer Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis à la recherche de la représentation mathématique de l'algorithme de "Feistel", une représentation sous forme Java ou C peut être utile aussi. Merci de me m'aider a comprendre le principe et tout ce qui pourra m'aider a représenter l'algorithme de "Feistel" en un programme Java.
J'ai besoin de votre aide, et je vous remercie d'avance.
Je suis à la recherche de la représentation mathématique de l'algorithme de "Feistel", une représentation sous forme Java ou C peut être utile aussi. Merci de me m'aider a comprendre le principe et tout ce qui pourra m'aider a représenter l'algorithme de "Feistel" en un programme Java.
J'ai besoin de votre aide, et je vous remercie d'avance.
4 réponses
Dsl mais je préfere le mettre sur CCM pour que tout le monde puisse en profiter (rien de plus chiant que de tomber sur des topic sans réponse lorsque l'on fait des recherches)
Voila le code (il peut bugguer, je l'ai fait ce soir et je ne l'ai pas verifier):
Voila le code (il peut bugguer, je l'ai fait ce soir et je ne l'ai pas verifier):
/* Ce code est l'implémentation de l'algorithme de Feistel en C * Ce code n'est évidemment pas adapté pour faire un cryptage 100% fiable, entre autre a cause de l'horrible bijection que j'ai improvisée * Mais il est parfait pour etre utiliser a des fins éducatives * * Ecrit par M-killer à l'intention de Luca * * Ce code est en deux parties : la déclaration des fonctions de l'algorithme et les variables a déclarée dans la fonction main avant d'utiliser l'algorithme * Le cryptage s'effectue avec la fonction multitour(). Le parametre tours indique le nombre de tour (par exemple pour 16 le DES) * * Des schémas expliquant le fonctionnement de l'algorithme sont disponible sur internet : * http://www.bibmath.net/crypto/moderne/feistel.php3 * */ //Déclaration des fonctions char f(char caractere){ //f est une bijection aléatoire ou pseudo-aléatoire // (définition de bijection sur wikipédia =P ) return (char) ( 7*((int) caractere ) + 3 ) % 256 //cette formule est vraiment une bijection pourrie pour faire un cryptage // correct mais tu peux la changer } void simpletour(char* iarray, char* oarray, int size){ int cpt = 0; while(cpt<size){ oarray[2*cpt] = iarray[2*cpt+1]; oarray[2*cpt+1] = iarray[2*cpt] ^ f(iarray[2*cpt+1]); //le symbole ^ est le symbole de l'opération logique XOR en c cpt++; } } //la chaine de caractère finale se situe dans la chaine oarray void multitour(char* iarray, char* oarray, int size, int nbtours){ char* temp; while(nbtours > 0){ simpletour(iarray, oarray, size); temp = iarray; iarray = oarray; oarray = temp; nbtours--; } } //la chaine de caractère final se situe dans la chaine iarray //Variables a déclarer dans la fonction main() int size; //moitié de la taille de la chaine de caractère d'entrée char iarray[2n]; //chaine de caractère d'entrée char oarray[2n]; //chaine de caractère de résultat //Exemple d'utilisation (DES) : multitour(iarray, oarray, size, 16); //La chaine iarray contient maintenant une chaine cryptée