Cryptage / decryptage basique en php utilisant le principe du carre de vigenère

Soyez le premier à donner votre avis sur cette source.

Snippet vu 33 085 fois - Téléchargée 22 fois

Contenu du snippet

Bon, c'est hyper basique comme cryptage.

J'avais pondu ca lors de mes cours de philo, en 98, au debut c'etait en Pascal. Je l'ai converti en Php l'an passe pour m'amuser un peu. (c'est fou ce qu'on s'ennuie en Oklahoma...!)

Le principe est simple: on dispose d'un texte que l'on veut crypter. On y ajoute une clef. Le principe est d'ajouter la valeur ascii de la premiere lettre du texte original a la valuer ascii de la premiere lettre de la clef, et ainsi de suite jusqu'a la fin du texte.

Pour le decodage, on fait l'oppose.

Le code est a ameliorer...

Source / Exemple :


=--= Fonction "Crypter" =--=

//Début de ma fonction crypter 
//Entrée: message à crypter, mot de passe. (les deux sont de type chaine) 
//Je considère les chaines comme étant des tableaux de caractères 
//Sortie: message encrypté. (chaine) 
//Ecrit par Tadpole, Décembre 1998, cours de Philo. 
//Traduit du Pascal/Delphi
   function crypter($mes,$password) {
	 $res=' ';
	 $j=0;
	 $tmp=0;
//initialisations des variables. 
//J'ai pour habitude de toujours déclarer les types de mes variables...
	 $lgmot = strlen($mes);
//on récup la longueur du message 
//puis on boucle en analysant chaque caractère tour à tour jusqu'au bout du message.
	for ($i = 0; $i < $lgmot; $i++) {
		$tmp = ord($mes[$i]) + ord($password[$j]);
//La ligne précédente est le coeur du programme: 
//on ajoute la valeur ascii du caractère en position i 
//à la valeur ascii du caractère en position j. Simple mais efficace. 
//si le resultat est supérieur a 255, pas de panique, on enlève 256 et on retombe sur nos pieds ;-)
	if ($tmp > 255) {
			$tmp = $tmp - 256;
			}
		$res[$i]=chr($tmp);
	if ($j == (strlen($password)-1)) {
			$j= 0;
			}	else {
			$j=(($j % (strlen($password))) + 1);
//Ahh... le modulo... J'adore :-)
			}
		}
        $res = base64_encode($res);
//base64 est conseille pour le traitement des chaines longues, cf. 'Programming PHP', Ed. O'Reilly, Rasmus Lerdorf & Kevin Tatroe, page 385.
	return $res;
//On retourne le messsage crypté.
	}

=--= Fonction "Décrypter" =--=

//Début de ma fonction décrypter 
//Entrée: message à décrypter, mot de passe. (les deux sont de type chaine) 
//Je considère les chaines comme étant des tableaux de caractères 
//Sortie: message décrypté. (chaine) 
//Ecrit par Tadpole, Décembre 1998, cours de Philo. 
//Traduit du Pascal/Delphi
   function decrypter($mes,$password) {
	 $res=' ';
	 $j=0;
	 $tmp=0;
//Initialisation des variables 
         $mes = base64_decode($mes);
//on decode le message encode en base64.
//Ensuite, on récup la longueur du message 
//Puis on boucle tant que nous n'avons pas parcouru 
//chaque lettre contenue dans le message.
	 $lgmot = strlen($mes);
	for ($i = 0; $i < $lgmot; $i++) {
		$tmp = ord($mes[$i]) - ord($password[$j]);
//ici on prends les 2 valeurs ascii des caratères du message 
//en position i et du mot de passe en position j et on les soustrait. 
//Si le résultat est négatif, pas de panique, on ajoute 256 et hop, 
//nous nous y retrouvons.
	if ($tmp < 0) {
			$tmp = 256 + $tmp;
			}
			$res[$i]=chr($tmp);
		
	if ($j == (strlen($password)-1)) {
			$j= 0;
			}	else {
			$j=(($j % (strlen($password))) + 1);
//Modulo pour parcourrir le mot de passe...
			}
		}
	return $res;
	}

Conclusion :


Voila, j'attends vos critiques, car je sais que ce source est loin d'etre parfait :)

A voir également

Ajouter un commentaire Commentaires
Messages postés
11
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
25 mars 2010

Ca date mais c'est toujours d'actualité !
Merci pour cette source, j'ai juste ajouté un urlencode($res) afin de passer le token crypté dans une url, et c'est parfait !
Messages postés
1
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
3 janvier 2007

Merci pour ces deux petites fonctions bien pratiques !
Messages postés
4
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
24 octobre 2006

ok merci bien a vous deux, j'apprecie grandement vos commentaires!!!
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Ouep jamais de trim sur la chaine crypté... par contre sur la chaine décrypté il faut généralement le faire notament sur les algo de block (à cause du padding appliqué aux blocks)... .. .

@ tchaOo°
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Encore moi... J'ai eu un flash durant une extremement ennuyeuse reunion d'équipe :

l'appelle de trim() juste avant de retourner le message crypté est une grave erreur, car trim() occasionne une perte de donnée irréversible.

Par exemple, si tu cryptes un numero de compte banquaire. Et par malchance, le dernier numéro glisse sur un espace ou un retour charriot, ou... Tu le pers !!
Afficher les 12 commentaires

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.