Cryptage/décryptage aléatoire (one time password)

4/5 (16 avis)

Snippet vu 16 059 fois - Téléchargée 34 fois

Contenu du snippet

Bah bah... il s'agit d'une technique que j'ai pondue ce matin (???! J'ai rien inventé, je sais!) pour crypter/décrypter un texte de manière à ce que ce ne soit jamais le même cryptage, contrairement à ce que fait un système comme SHA-1 ou MD5.
C'est tout bête:
- génération d'un seed
- msg XOR seed
et c'est tout!

Pour décrypter, on fait crypt XOR seed (forcément, avec XOR, l'avantage c'est que a XOR b XOR b ça fait a !)

Voilà! C'est pour les paranos du mail ou de la connexion à une bd, sinon je vois pas à quoi ça sert comme ça ;o)

Source / Exemple :


-- formulaire pour insérer le texte à crypter

<HTML><TITLE>CRYPTAGE SYMETRIQUE</TITLE>
<BODY bgcolor=#ccddee>
Seuls les caractères suivants sont acceptés: <B>ABCDEFGHIJKLMNOPQRSTUVWXYZ .,;-@</B><BR />
<FORM action="hex2.php" method="post">
<textarea name="texte" rows="20" cols="40"></textarea>
<input type="submit" name="valider" value="Valider">
</form>
</BODY></HTML>

-- fichier hex2.php pour crypter/décrypter

<?php

// Entrées de la fonction convert_dec: le message et le tableau 
// qui retournera les positions dans l'alphabet
function convert_dec($msg,&$dec){
	
	$size = strlen($msg);
	$lettres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .,;-@";
	
	for ($i=0;$i<$size;$i++){
		switch(substr($msg,$i,1)){
			case 'A': $dec[$i] = 0; break;
			case 'B': $dec[$i] = 1; break;
			case 'C': $dec[$i] = 2; break;
			case 'D': $dec[$i] = 3; break;
			case 'E': $dec[$i] = 4; break;
			case 'F': $dec[$i] = 5; break;
			case 'G': $dec[$i] = 6; break;
			case 'H': $dec[$i] = 7; break;
			case 'I': $dec[$i] = 8; break;
			case 'J': $dec[$i] = 9; break;
			case 'K': $dec[$i] =10; break;
			case 'L': $dec[$i] =11; break;
			case 'M': $dec[$i] =12; break;
			case 'N': $dec[$i] =13; break;
			case 'O': $dec[$i] =14; break;
			case 'P': $dec[$i] =15; break;
			case 'Q': $dec[$i] =16; break;
			case 'R': $dec[$i] =17; break;
			case 'S': $dec[$i] =18; break;
			case 'T': $dec[$i] =19; break;
			case 'U': $dec[$i] =20; break;
			case 'V': $dec[$i] =21; break;
			case 'W': $dec[$i] =22; break;
			case 'X': $dec[$i] =23; break;
			case 'Y': $dec[$i] =24; break;
			case 'Z': $dec[$i] =25; break;
			case ' ': $dec[$i] =26; break;
			case '.': $dec[$i] =27; break;
			case ',': $dec[$i] =28; break;
			case ';': $dec[$i] =29; break;
			case '-': $dec[$i] =30; break;
			case '@': $dec[$i] =31; break;
		}
	}
			
}

// Entrées de la fonction convert_str: le tableau des positions dans l'alphabet,
// la taille du string et le string en retour

function convert_str($tab,$size,&$str){
	
	$str = "";
	for ($i=0;$i<$size;$i++){
		switch($tab[$i]){
			case '0' : $str .="A"; break;
			case '1' : $str .="B"; break;
			case '2' : $str .="C"; break;
			case '3' : $str .="D"; break;
			case '4' : $str .="E"; break;
			case '5' : $str .="F"; break;
			case '6' : $str .="G"; break;
			case '7' : $str .="H"; break;
			case '8' : $str .="I"; break;
			case '9' : $str .="J"; break;
			case '10': $str .="K"; break;
			case '11': $str .="L"; break;
			case '12': $str .="M"; break;
			case '13': $str .="N"; break;
			case '14': $str .="O"; break;
			case '15': $str .="P"; break;
			case '16': $str .="Q"; break;
			case '17': $str .="R"; break;
			case '18': $str .="S"; break;
			case '19': $str .="T"; break;
			case '20': $str .="U"; break;
			case '21': $str .="V"; break;
			case '22': $str .="W"; break;
			case '23': $str .="X"; break;
			case '24': $str .="Y"; break;
			case '25': $str .="Z"; break;
			case '26': $str .=" "; break;
			case '27': $str .="."; break;
			case '28': $str .=","; break;
			case '29': $str .=";"; break;
			case '30': $str .="-"; break;
			case '31': $str .="@"; break;
		}
	}
}

// Fonction pour générer le seed

function generateSeed($size, &$seed){

	$lettres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .,;-@";
       
	$seed = "";
	for ($i=0;$i<$size;$i++){
	$seed .= substr($lettres, (md5((time()*rand()))%($size))%32, 1);
                    }
}

// Fonction de cryptage en utilisant XOR

function cryptXor($mssg,$seed,&$crypted){

	$size = strlen($mssg);
	convert_dec($mssg,$dec_mssg);
	convert_dec($seed,$dec_seed);
	
	// message XOR seed

	for ($i=0;$i<$size;$i++){
		$crypt[$i] = ($dec_mssg[$i] ^ $dec_seed[$i])%32;
	}
	
	//Conversion du résultat du XOR en décimal

	convert_str($crypt,strlen($mssg),$crypted);
}

function decryptXor($crypted,$seed,&$decrypted){

	$size=strlen($crypted);
	convert_dec($crypted,$dec_crypted);
	convert_dec($seed,$dec_seed);
	
	for ($i=0;$i<$size;$i++){
 		$decrypt[$i] = ($dec_crypted[$i] ^ $dec_seed[$i])%32;
	}

	convert_str($decrypt,$size,$decrypted);
}

$mssg = $_POST['texte'];
$size = strlen($mssg);

generateSeed($size,$seed);

cryptXor($mssg,$seed,$crypted);

decryptXor($crypted,$seed,$decrypted);

echo "Message: ".$mssg."<BR /><BR />";
//echo "Seed   : ".$seed."<BR />";
echo "Crypted: ".$crypted."<BR /><BR />";
echo "Decrypt: ".$decrypted."<BR />";
?>

Conclusion :


C'est basé sur l'alphabet ABCDEFGHIJKLMNOPQRSTUVWXYZ .,;-@

Un exemple d'exécution:

Pour le message "KENNST DU DAS LAND WO DIE ZITRONEN BLUHEN" (c'est bô, c'est de Johann Wolfgang von Goethe ;o)) on a une fois:
Message: KENNST DU DAS LAND WO DIE ZITRONEN BLUHEN
Crypted: KELNK Y -DIS-LANBKWYNDIAH-ITDOFENYFJTHDF
Decrypt: KENNST DU DAS LAND WO DIE ZITRONEN BLUHEN

Une autre fois:
Message: KENNST DU DAS LAND WO DIE ZITRONEN BLUHEN
Crypted: KEQGUT DU AEN@.YK,XWK QOA OITROHEM-CLUUNN
Decrypt: KENNST DU DAS LAND WO DIE ZITRONEN BLUHEN

A voir également

Ajouter un commentaire Commentaires
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 janv. 2005 à 23:28
KENNST DU DAS LAND WO DIE ZITRONEN BLUHEN=connais tu le pays ou les citrons poussent ?

juste comme ça, il y a mieux de Goethe.... par exemple les souffrances du jeune Werthert, et tout un tas de poèmes, si tu veux pousser dans la culture allemande, tu peux aussi chercher Die Arzte (mach die augen zu, allein in der nacht, shrei nach liebe, revolution, mir ist langweillig ...), ou de Honner (Viva Colonia)

Enfin tout ça pour te dire que ton texte est court, et ici, le crypter ne présente aucun interet, et fort heureusemnet, on n'avais pas fait souvent de XOR ici, on avait fait cesar, enigma, DES, MD5 (ce qui n'est pas du cryptage), mais c'est tout, le meilleur d'entre tout ces algos c'est DES, ton XOR ne lui arrive pas à la cheville à part si ta clef fait plus de la taille du texte à crypter...

DES te bat aussi niveau vitesse et compréhention du code car il est implémenté dans php...

sinon, pour la crypto, t'as AES RSA et un autre truc assymétrique dont je n'ai que peu entendu parlé...
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
15 janv. 2005 à 07:47
Hello...
- y a peut-être mieux de Goethe selon toi, c'est chacun ces goûts
- md5 est une fonction de hashage, pas de cryptage, , y a pas de soucis à ce sujet
- cesar, ça se base sur un simple décalage alphabetique, enigma sur des rotors et des connexions, c'est deux univers totalement différents (j'ai bossé sur Enigma, je dis pas ça au bol donc).
- DES n'est pas le meilleur algo de cryptage, il y en a des bien plus puissants
- DES est implémenté en php et n'a donc aucun intérêt niveau programmation tel quel
- AES, RSA etc sont effectivement d'autres algorithmes de cryptages, AES est symétrique (si ma mémoire est bonne), RSA pas

Alors oui, mon algorithme ici c'est du pipi de chat à coté de ces standards que sont DES, AES, RSA... mais je m'en fouts, mon but était de pondre quelque chose. De plus, mon one-time-password n'est pas cassable par un analyseur, alors tu comprendras que je trouve ta remarque un peu hautaine et ton "4" facile...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
15 janv. 2005 à 11:57
RSA assymétrique, AES symétrique, je sais tout ça, et DES n'est pas le meilleur des symétriqes, je ne crois aps avoir dit ça non plus, mais ça reste meilleur que ton XOR...

Quand à mon 4, accuses donc qqn d'autre, je ne t'ai pas noté... Cette personne était extrèmement lache car elle n'a pas cherché à te donner des amélioratrion possibles...

si tu veux de la doc sur la crypto, laisse moi ton mail...

Pour tes switchs, tu aurais pu faire une chaine et un for...
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
15 janv. 2005 à 12:58
ok... pour la crypto, merci j'ai déjà de la doc. J'ai un cours de sécurité et cryptographie dans mon école (http://lasecwww.epfl.ch/).

Je sais bien que DES et compagnie sont mieux que mes XOR, ce ne seraient pas des standards sinon! J'ai voulu faire quelque chose par moi même, qui me suffise au niveau sécurité, c'est tout. Mais ça a pas lâire de plaire ;o) Tant pis, je ferai mieux pour ma prochaine soure !!!

See you
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
15 janv. 2005 à 13:22
c'est pas que ça ne me plait pas (je dois adopter un système de crypto, mais je ne sais pas lequel choisir...), c'est juste que ça me semble peu efficace, quand on saitque meteofrance avait en 2000 un ordi qui faisait seulement 10* moins de calculs en 48 h qu'il n'en faut pour casser une clef RSA 155... quand on sait que l'ordi de meteofrance aparaissait à l'époque en en 47 ème position des orids les plus puissants de la planète et que tout les ans, le meilleur ordi est battu.... Quand on sait que le RSA 155 est interdit et que l'on doit faire du RSA 128 au maximum... Enfin voila, si on peut casser facilement du RSA 155 de nos jours, que doit on faire du XOR ??

L'avantage du XOR, c'est qu'il n'a pas de taille de clef prédéfinie, donc on peut faire un XOR avec une iamge ISO de 4 GO, ce qui pourra crypter quasi nimporte quel fichier avec une sécuritée maximale...

seul problème : le passage de la clef...

On ne passe pas facilement une clef de 4GO...

et si tu le fait en local, ça veut dire que tu as la clef sur toi...

Enfin voila, c'est irréalisable...

C'est pour cette raison que j'aimes bien les principes de RSA... et tout ce qui est assymétrique...

Il existe une autre méthode puissante de crypto assymétrique, avec des équations très jolies en "bules" si tu connais, je suis prenneur, je n'ai pas de doc sur celle la, et j'en aurais vraiment besoin pour choisir ma méthode... (il existe des choses qui ne devraint ni êtres lues, ni êtres vécues...) J'ai vraiment besoin de crypter, je ne peux passer un fichier de 4GO sur le net, donc j'ai vraiment besoin de cette doc...

Je dois ajouter : je n'ai pas mis de note, et il vaut plus que 4 pour te prouver que je n'ai pas mis de notes, je met 8/10...

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.