begin process at 2010 09 02 22:21:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > ALGORITHME DE CÉSAR SUR LA TABLE ASCII

ALGORITHME DE CÉSAR SUR LA TABLE ASCII


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité & Cryptage Classé sous :césar, substitution, ascii Niveau :Débutant Date de création :04/12/2009 Date de mise à jour :04/12/2009 10:34:05 Vu :2 292

Auteur : Nementon

Ecrire un message privé
Site perso
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Bonjour,

Alors voila, simple et basic, histoire d'apporté un regarde différent (Tout du moins par rapport aux codes du genre qui se compliquent la tête selon moi, dans phpcs) pour l'utilisation de l'algo de César sur la table Acsii.

Source

  • <?php
  • #--------------------------------------------------------------------------------------------
  • # Function cesar(string $word, int $offset, int $mode)
  • #
  • # @$word -> La chaine à encrypter ou decrypter;
  • # @$offset -> Le Nombre d'offset de decalage
  • # @$mode -> 1 pour encrypter (Incrémenter), tout autre pour decripter (Decrementer)
  • # return -> La chaine $word altéré grace à la methode de césar d'apres les tables ascii
  • #
  • # By Nementon, ---[http://uwht.u7n.org]---
  • #---------------------------------------------------------------------------------------------
  • function cesar($word, $offset, $mode) {
  • $offset = intval($offset);
  • $mode = intval($mode);
  • $wLenght = strlen($word);
  • $return = '';
  • if ($mode == 1 ) {
  • for ($i = 0; $i < $wLenght; $i++) {
  • // On recuperer le code ascii
  • $tmpAscii = ord($word[$i]);
  • // On ajoute à la chaine finale, la corespondance du code ascii recuperé incrementé de l'offset passé en parametre
  • $return .= chr($tmpAscii+$offset);
  • }
  • }
  • else {
  • for ($i = 0; $i < $wLenght; $i++) {
  • $tmpAscii = ord($word[$i]);
  • $return .= chr($tmpAscii-$offset);
  • }
  • }
  • return $return;
  • }
  • #--------------------------------------------------------------------------------------------
  • # function cesar2(string $word, int $offset, int $mode)
  • #
  • # @$word -> La chaine à encrypter ou decrypter;
  • # @$offset -> Le Nombre d'offset de decalage
  • # @$mode -> 1 pour encrypter (Incrémenter), tout autre pour decripter (Decrementer)
  • # @return -> La chaine $word altéré grace à la methode de césar d'apres les tables ascii
  • #
  • #---------------------------------------------------------------------------------------------
  • // Exemple de fonction césar un plus tortueuse
  • function cesar2($word, $offset, $mode) {
  • $offset = intval($offset);
  • $mode = intval($mode);
  • $wLenght = strlen($word);
  • $return = '';
  • if ($mode == 1 ) {
  • for ($i = 0; $i < $wLenght; $i++) {
  • // On recuperer le code ascii
  • $tmpAscii = ord($word[$i]);
  • $return .= chr($tmpAscii+$offset+(($i*$wLenght)-$i));
  • }
  • }
  • else {
  • for ($i = 0; $i < $wLenght; $i++) {
  • $tmpAscii = ord($word[$i]);
  • $return .= chr($tmpAscii-$offset-(($i*$wLenght)-$i));
  • }
  • }
  • return $return;
  • }
  • //Exemple :
  • echo '<b>Cesar : </b><br />', cesar("abc", 666, 1), // Encrypte;
  • '<br />', cesar("ûüý", 666, 2), '<br /><br />'; // Decrypte
  • //Exemple :
  • $wEncrypte = cesar2("abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789", 666, 1);// Encrypte;
  • echo '<b>Cesar 2 : <b/><br />', $wEncrypte, '<br />', cesar2($wEncrypte, 666, 2); // Decrypte
  • ?>
<?php 
#--------------------------------------------------------------------------------------------
#	Function cesar(string $word, int $offset, int $mode)
#
#	@$word    -> La chaine à encrypter ou decrypter;
#	@$offset  -> Le Nombre d'offset de decalage 
#       @$mode    -> 1 pour encrypter (Incrémenter), tout autre pour decripter (Decrementer)
#       return    -> La chaine $word altéré grace à la methode de césar d'apres les tables ascii
#
#   By Nementon, ---[http://uwht.u7n.org]---
#---------------------------------------------------------------------------------------------

function cesar($word, $offset, $mode) {
	$offset  = intval($offset);
	$mode    = intval($mode);
	$wLenght = strlen($word);
	$return  = '';
	
	if ($mode == 1 ) {
		for ($i = 0; $i < $wLenght; $i++) {
			// On recuperer le code ascii
			$tmpAscii = ord($word[$i]);
			// On ajoute à la chaine finale, la corespondance du code ascii recuperé incrementé de l'offset passé en parametre
			$return  .= chr($tmpAscii+$offset);
		}
	}
	else {
		for ($i = 0; $i < $wLenght; $i++) {
			$tmpAscii = ord($word[$i]);
			$return  .= chr($tmpAscii-$offset);
		}
	}
	return $return;
}
#--------------------------------------------------------------------------------------------
#	function cesar2(string $word, int $offset, int $mode)
#
#	@$word    -> La chaine à encrypter ou decrypter;
#	@$offset  -> Le Nombre d'offset de decalage 
#   @$mode    -> 1 pour encrypter (Incrémenter), tout autre pour decripter (Decrementer)
#   @return   -> La chaine $word altéré grace à la methode de césar d'apres les tables ascii
#
#---------------------------------------------------------------------------------------------
// Exemple de fonction césar un plus tortueuse
function cesar2($word, $offset, $mode) {
	$offset  = intval($offset);
	$mode    = intval($mode);
	$wLenght = strlen($word);
	$return  = '';
	
	if ($mode == 1 ) {
		for ($i = 0; $i < $wLenght; $i++) {
			// On recuperer le code ascii
			$tmpAscii = ord($word[$i]);
			$return  .= chr($tmpAscii+$offset+(($i*$wLenght)-$i));
		}
	}
	else {
		for ($i = 0; $i < $wLenght; $i++) {
			$tmpAscii = ord($word[$i]);
			$return  .= chr($tmpAscii-$offset-(($i*$wLenght)-$i));
		}
	}
	return $return;
}

	//Exemple :
	echo '<b>Cesar : </b><br />', cesar("abc", 666, 1), // Encrypte;
	'<br />', cesar("ûüý", 666, 2), '<br /><br />'; // Decrypte

       //Exemple  :
	$wEncrypte = cesar2("abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789", 666, 1);// Encrypte;
	echo '<b>Cesar 2 : <b/><br />', $wEncrypte, '<br />',  cesar2($wEncrypte, 666, 2); // Decrypte
?>

 Conclusion

Bon, un peu useless pour surement 97% d'entre vous, mais ce code source la m'aurait bien aidé à mes début ; )

Tous commentaires sont les bienvenus.


 Historique

04 décembre 2009 10:18:46 :
- Ajout de l'exemple "césar2"
04 décembre 2009 10:34:05 :
- Commentaires en moins ; )

 Sources du même auteur

Source avec Zip Source avec une capture GESTIONNAIRE DE FICHIERS | MYSQL PHP 5.X {NEMENTON PHP MANA...

 Sources de la même categorie

CLASSE DE CHIFFREMENT DE DONNÉS AVEC MCRYPT par TychoBrahe
FONCTION DE NETTOYAGE DE VARIABLES AVEC UNE INSTALLATION DE ... par jroger
Source avec une capture CODEC D'OBFUSCATION DE LIEN HTML (PHP5) par masternico
GÉRER UN .HTPASSWD par coockiesch
Source avec Zip SERSESSIONS > CLASS PHP5 POUR GERER LES SESSIONS SIMPLEMENT ... par Astalavista

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ASCIIART : PHP-CURSES par coucou747
CHIFFRE DE CESAR par jean84
Source avec Zip TRANSFORMATION : IMAGE => ASCII ART par coucou747

Commentaires et avis

Commentaire de neigedhiver le 06/12/2009 01:19:53

Salut,

Toi aussi tu te compliques la vie ;)

for ($i=0; $i<$wLenght; $i++) {
  $word[$i] = chr(ord($word[$i])+$offset);
}
return $word;

Le mode n'est pas utile : si on connait la valeur de $offset, il suffit de passer son opposé en argument.
Sinon, je crois que tu n'implémentes pas correctement l'algorithme de César, qui est pourtant d'une simplicité déconcertante...
http://fr.wikipedia.org/wiki/Chiffrement_par_d%C3%A9calage
On décale toujours d'une valeur fixe : la valeur du décalage n'est pas fonction de la position du caractère dans la chaîne chiffrée, contrairement à ton implémentation. En fait, ton implémentation est à mi chemin entre le chiffre de César et le chiffre de Vigenère : un décalage fonction de la position du caractère dans la chaîne, mais sans clé (contrairement à Vigenère ou Vernam qui en utilisaient une).

En gardant l'argument $mode et en poussant un peu, on peut même utiliser la même boucle pour additionner ou soustraire :
<?php
function caesar ($string, $offset, $mode = 1) {
        $len = strlen($string);
        $coeff = (1 == $mode) ? 1 : -1;
        for($i=0 ; $i<$len ; $i++) {
                $string[$i] = chr(ord($string[$i])+$offset*$coeff);
        }
        return $string;
}
?>

Désolé pour l'indentation, on peut pas faire mieux dans les commentaires...

Et avec un iterateur, on pourrait faire ça en une seule ligne... Arf.;)

Commentaire de neigedhiver le 06/12/2009 01:38:40

Avec un itérateur de la SPL :

function caesar($string, $offset, $mode) {
  foreach ($it = new ArrayIterator(str_split($string)) as $char) {
    $string[$it->key()] = chr(ord($string[$it->key()])+$offset*pow(-1, intval((bool) $mode)+1));
  }
}

On pourrait faire encore un peu plus propre avec la classe StringIterator que j'avais publiée il y a quelques temps.

Commentaire de neigedhiver le 06/12/2009 01:40:23

Oups, au temps pour moi... même si ça fonctionne, autant utiliser la variable $char :

function caesar($string, $offset, $mode) {
  foreach ($it = new ArrayIterator(str_split($string)) as $char) {
    $string[$it->key()] = chr(ord($char)+$offset*pow(-1, intval((bool) $mode)+1));
  }
}

Commentaire de Nementon le 06/12/2009 03:02:57

Héhé, oui tout à fait, j'ai hésité à le faire sur deux lignes, mais, comme c'est dans la vision de le partager aux débutants tout débutants, je me suis dis qu'il ne valait mieux ne pas faire trop tordu ; )

Pour l'algo de césar, effectivement, je ne n'avais pas pensé sur que coups, que la deuxièmes fonction, se transformée tellement qu'elle n'était plus de César (Je ne suis pas du matin, faut croire ;)

Intéressant le code de la SPL, tes remarques aussi, étant donné que je débute en crypto.

Par contre, ce que je vais rajouter, c'est une petite condition pour eviter de depasser le 250em caractères de la table ACSII (Si mes souvenir sont bons).
Au début je m'étais dis, que c'était futile, m'enfin bon, ma source est incomplète sans ca, donc si quelqu'un repasse par ici, source modifier. (J'en profite pour enlever la deuxièmes fonction)

Commentaire de Nementon le 06/12/2009 03:29:57

Édit : j'ai rien dis, php est un bon, il gère ca lui même comme un grand, je laisse ma fonction hybride du coups, tiens je le nomme même algorithme du champi pour l'occase, hop ;)

Commentaire de kals1986 le 07/12/2009 14:42:07

essaie d'implementer  avec le des(data encrytion system)
c'est puissant

Commentaire de neigedhiver le 07/12/2009 15:48:41

L'algorithme de César avec DES, ce n'est plus l'algorithme de César... C'est du DES. Faut pas tout mélanger quand même.

Commentaire de kals1986 le 07/12/2009 16:34:21

le cesar est facilement dechiffrable tandis que le des est beaucoup plus complique
je sors pas du cadre , je propose uniquement vu la securite et la motivation informatique

Commentaire de neigedhiver le 07/12/2009 16:54:39

Si, tu sors du cadre : cette source présente une implémentation de l'algorithme de César. Elle ne prétend pas fournir un algorithme de chiffrement sécurisé. L'auteur a, me semble-t-il, parfaitement conscience des limitation de cet algorithme de chiffrement.
Utiliser un autre algorithme pour chiffrer n'aurait pas de sens DANS CETTE SOURCE qui n'a pas cette vocation.
Restons donc dans le cadre de ce que propose l'auteur.
Si quelqu'un cherche un algorithme pour chiffrer de manière sécurisée ses données, il utilisera plutôt la librairie mcrypt de PHP. Ici, on montre comment implémenter l'algorithme de César, point.

Commentaire de Nementon le 08/12/2009 01:02:27

Oui, oui, c'est effectivement hors contexte de la source, m'enfin c'est moi aussi, qui suis partis en free style à la base ; )

Merci Kals1986 pour l'info, je regarderai ca, mycrypt aussi en php pourquoi pas, je les prends pour infos persos, mais pas d'énervement, il y à tellement peut à dire sur la source qu'on peut se permettre de papoter voyons ^^

(Ps : Notons bien que rien n'est spécifié sur les limites de la porté des posts de la partie "commentaires et avis" dans la charte de bonne conduite)
->(Aouch, hérésie, la sang risque de couler à flot)

Commentaire de lemonwarez le 16/12/2009 17:14:25 10/10

Tu m'impressionnera toujours Nementon ;)

NightMare.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

j'ai une question! [ par louna_r ] salut,j'ai consult&#233; le php.net pour comprendre une fonction qui est chr() et ils ont dit qu'elle retourne une cha&#238;ne d'un seul caract&#232;r Passer du code ascii dans une url [ par pichpoich ] Lorsque je passe un code ascii de type &eacute; dans une url pour afficher un texte apr&#232;s une saisie erron&#233;e par exemple, le caract&#232;re valeur max et substitution [ par Jp2A ] bonjour à tous voici ma question:imaginons la table membre avec les champs: pseudo et score.j'aimerais af Reencodage caractere ascii [ par kishkaya ] Bonjour,J'aimerais savoir si il existe en PHP une fonction pour réobtenir depuis une chaine de caractere une chaine ou les caracteres spéciaux sont ré faire un graph en PHP à partir d'un fichier ASCII [ par poseidon1976 ] Salut à tous,Je suis débutante en PHP.J'ai un programme en PHP qui me permet de tracer un graph mais à partir de données durs. J'aimerais savoir comme chaines de substitution [ par slhuilli ] bonjour,mon soucis d'hier est résolu, ca  tourne.Je cherche maintenant une doc sur les chaines de substitution (%s and co) je m'en suis jamais servi e convertir du texte en code ASCII ????? [ par zut69 ] Bonsoir,Je chercherais une méthode pour convertir du texte en code ASCII, c est a dire une fonction qui me convertirait:$variable = "ab cd";en:$variab insert code ASCII dans une table mysql [ par studenttours ] bonjour,j'ai du code hexa que je transforme en texte(la fonction marche parfaitement), et lorsque j'insere le résultat dans une table mysql, il m'inse Transformation de Ascii en caractère [ par Noizet ] Hello,Est-ce qu'il existe une fonction qui transforme mon code ascii en caractère?Merci"NoiZet" images en ASCII [ par novaflash ] bonjour, néophyte absolu en PHP (et il y a des chances que je le reste!) je cherche un lien pour trouver une info relative à un petit script récupéré


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales