Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CÉSAR


Information sur la source

Catégorie :Chaîne de caratère Niveau : Débutant Date de création : 20/08/2004 Date de mise à jour : 29/08/2004 11:48:24 Vu / téléchargé: 4 061 / 479

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Le chiffrement de César  

Ce code de chiffrement est un des plus anciens, dans la mesure où Jules César l'aurait utilisé. Le principe de codage repose sur l'ajout d'une valeur constante à l'ensemble des caractères du message, ou plus exactement à leur code ASCII(pour une version "informatique" de ce codage).

Il s'agit donc simplement de décaler l'ensemble des valeurs des caractères du message d'un certain nombre de positions, c'est-à-dire en quelque sorte de substituer chaque lettre par une autre.

Ce code est fourni avec un formulaire (voir le screen) pour vous montrez son fonctionnement. Vous pouvez l'utilisé en ligne  à l'adresse de mon site
http://ndwc.fwhost.net/
 

Source

  • <?
  • /*
  • Cesar($chaine,$choix,$pos,$mode);
  • $chaine : chaine à convertir
  • $choix : nombre de décalage de lettres
  • $pos : sens de décallage "-1" vers la gauche
  • "1" vers la droite
  • $mode : "0" cryptage
  • "1" decryptage
  • */
  • function Cesar($chaine,$choix,$pos,$mode){
  • global $chaine;
  • $test="abcdefghijklmnopqrstuvwxyz";
  • if($mode!="0"){$pos=-$pos;}
  • for($i=0;$i<strlen($chaine);$i++){
  • if(strpos($test, $chaine[$i]) !== false){
  • $j=strpos($test,substr($chaine,$i,1));
  • if($pos=="-1"){
  • $j -= $choix;
  • while($j<0){$j +=strlen($test);}
  • }
  • else{
  • $j += $choix;
  • while($j+1>strlen($test)){$j -=strlen($test);}
  • }
  • $chaine[$i]=$test[$j];
  • }
  • }
  • }
  • ?>
<?
/*
Cesar($chaine,$choix,$pos,$mode);
$chaine : chaine à convertir
$choix : nombre de décalage de lettres 
$pos : sens de décallage "-1" vers la gauche
			 "1"  vers la droite 
$mode : "0" cryptage
	"1" decryptage
*/

function Cesar($chaine,$choix,$pos,$mode){
global $chaine;
$test="abcdefghijklmnopqrstuvwxyz";
	if($mode!="0"){$pos=-$pos;}
	for($i=0;$i<strlen($chaine);$i++){
		if(strpos($test, $chaine[$i]) !== false){
		$j=strpos($test,substr($chaine,$i,1));

			if($pos=="-1"){
			$j -= $choix;
			while($j<0){$j +=strlen($test);}
			}

			else{ 
			$j += $choix;
			while($j+1>strlen($test)){$j -=strlen($test);}
			}
	
		$chaine[$i]=$test[$j];
		}
	}
}
?>

Conclusion

voila on se rend compte qu'on n'a un texte non crypté qui devient crypté celon des parametres donc une clé. hélas ce procédé a été cassé depuis fors longtemps en verifiant l'utilisation des lettres des pays.
Meme si la technique de subsitution est faible pour le cryptage comparé à dautres je mettari bientot en ligne une version amélioré du code de césar
@+



 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

29 août 2004 11:48:24 :
//Mise à jour du code : comme en c une chaine est aussi un tableau donc on peut remplacer if($i!=0){$debut=substr($chaine,0,$i);} else{$debut="";} if($i!=strlen($chaine)){$fin=substr($chaine,$i+1,strlen($chaine)-$i);} else{$fin="";} $chaine=$debut.substr($test,$j,1).$fin; par $chaine[$i]=$test[$j]; Soit un gain de 30 à 50 %

Commentaires et avis

signaler à un administrateur
Commentaire de mathieumg le 21/08/2004 07:11:57

Bien mais il ne prend pas les majuscules :P

Mathieu M-G
mathieumg@qc-net.com

signaler à un administrateur
Commentaire de defkrie le 21/08/2004 09:41:01

comme je lai dit je mettrai bientot en ligne une version amélioré du code de césar avec cryptage aléatoire de la clé

signaler à un administrateur
Commentaire de lyon le 23/08/2004 11:00:17

Vous connaissez pas la fonction rot_13?

signaler à un administrateur
Commentaire de coucou747 le 23/08/2004 12:25:42

simple suggestion, on peut pas utiliser ça sur le web, t'as que 256 possibilitées par force brutte !!! faut absolument que tu  utilises autre chose genre AES ou RSA...

signaler à un administrateur
Commentaire de defkrie le 23/08/2004 15:16:09

C'est vrai cest une simple substitution, il suffit de savoir le pourcentage des caracteres dans la langue française et hop c'est terminé.
La prochaine version sera donc amélioré plage de caractères triplé et codage de la clé (avec de l'aléatoire).
Cette source montre le code de césar que certains s'amusent à utliser encore.

signaler à un administrateur
Commentaire de coucou747 le 23/08/2004 17:02:54

un consiel, pour ta prochaine source, utilises AES pour le crypto symétrique et RSA pour l'assymétrique

signaler à un administrateur
Commentaire de defkrie le 28/08/2004 11:32:59

explique comment tu trouves 256 possibilitées

signaler à un administrateur
Commentaire de coucou747 le 28/08/2004 11:47:12

regarde : césar c'est un décalage :
soit n le premier chiffre (base 256 car c'est un octet)
soit c le nombre clef
soit n2 le nombre obtennu

n2=(n+c)%256;


voila ta's un modulo de 256, donc c est aussi efficace que c%256...

Voila Voila...

donc pour casser tu fais :
n[100] le tableau qui contient le texte crypté
n2[100] le tableau qui contiendra le texte décrypté
for(c=0;c<256;c++){
for (i=0; i<100; i++){
n2[i]=(256+n-c)%256;
}
printf("%s\n",&n2);
choix=0;
pritnf("tapez 1 puis entrer si le texte est corect sinon, 0 puis entrer\n");
while(choix!=48 && choix != 49){
choix=getchar();
}
if (choix==49){
c=257;
}
}
printf("%s\n",&n2);
printf("clee: %u", c);

dsl, je l'ai fait en C car c'est un peu plus rapide que php et je connasi un peu mieux le C...

Enfin voila faut passer au aes ou au rsa

signaler à un administrateur
Commentaire de defkrie le 28/08/2004 17:10:27

ouais moi je voyais que le nombre de déplacemnt dépendait de la chaine ici l'alphabet. De plus, tu doit te taper 256 fois oui ou non et si le mot de départ est incohérent genre "rhhbkl" impossible de savoir qd tu essaie toutes les possibilités.
Ya plus simple tu compte le nombre de caracteres le plus utilisé et tu le remplace par les équivalents des pourcentages de la langue francaise.
Si sur un texte tu as le plus de  p c'est  que p = e et donc tu as le décalement.

signaler à un administrateur
Commentaire de coucou747 le 28/08/2004 17:17:24

et si ton texte est en anglais tu ne peux rien faire, si ton texte est en français maivais tu fais comment ? moi je cherhce les 100 premiers caractères la, mais ça se fait tellement rapidement que lm'on peut faire ça avec tt le fichier...

signaler à un administrateur
Commentaire de defkrie le 05/09/2004 14:04:34

comme promit voici la version amélioré
http://www.phpcs.com/code.aspx?ID=25931

signaler à un administrateur
Commentaire de azerty2100 le 27/09/2004 13:40:35

idee original

signaler à un administrateur
Commentaire de jean84 le 06/03/2007 06:15:29

Hello

Je cherchais justement une fonction comme celle la afin de mieux comprendre l'implementation possible en php. Malheureusement, je n'ai pas reussi a la faire fonctionner .. (suis-je un boulet ? surement ...).

Au niveau du code par contre, il serait interessant que tu places la valeur de strlen($test) directement dans une variable et ensuite tu l'utilises pour tes boucles, tes verfis ect... parce que la, tu perts un temps dingue a faire toujours le meme calcul a cahque tour de boucles ... tu peut arriver a tester la meme valeur des dizaines de fois rien que pour une petite chaine, alors si on veut s'amuser a crypter un texte complet, bonjour le temps perdu !
Autre idee : il peut etre interessant de composer son propre charset avec ta var $test, mais si tu ne l'as pas prevues, autant partir dans l'idee que l'alphabet fait 26 lettres (et je doute que sa change d'ici peu ^^), donc autant economiser un strlen(), a moins que, comme je l'ai dit, tu veuilles introduire la possibilite de composer son propre charset.

En tout cas merci quand meme, a defaut d'avoir fonctionner chez moi, j'aurais au moins saisie l'idee ;-)

@++

signaler à un administrateur
Commentaire de jean84 le 06/03/2007 06:21:06

J'ai oublie egalement un truc, evite de mettre un parametre passe a la fonction en global, sa peut poser des problemes si jamais on souhaite implementer ta fonction sur un projet, on ne sait pas a quoi peut servir la var plus tard donc dans le doute, mieux vaut la retourner, c'est plus sage ;-)

++

signaler à un administrateur
Commentaire de defkrie le 06/03/2007 12:56:13

Excat, je l'avour ce sont de mauvaises habitudes prises en C, la chaine globale doit etre suprimée et renvoyée en paramètre. De plus et là c'est flagrant pour les boucle il fut mieux stocker le résultat d'un strlen. Par soucis d'écriture je les imbriqué mais ct une erreur car à la longue on perd tu temps.
Pour l'utiliser il suffit de faire un require Cesar/function_Cesar.php et d'utiliser la fonction "aze","1","1","0" me donnera dans chaine la valeur crypté de aze ici un décalage vers la droite : "baf".
Pour le décoder il faut refaire la fonction avec "baf","1","1","1" et on retrouve "aze".
Jutilise des 0 et de 1 au lieu de booléen true et false, cela se discute et vient du faite qu'on ne fait pas de distinction de type de var en php. les autres fichiers servent d'exemple et surtout à le faire fonctionner comme dans le screen.
++

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.