begin process at 2010 02 10 08:00:04
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > CÉSAR

CÉSAR


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 556 / 505

Auteur : defkrie

Ecrire un message privé
Site perso
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

Les Membres Club peuvent 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 %

 Sources du même auteur

FICHIER ( ÉCRITURE, LECTURE....) POUR DÉBUTANT
Source avec Zip Source avec une capture CÉSAR PLUS (CRYPTAGE, DÉCRYPTAGE AVEC CLÉ ALÉATOIRE)
Source avec Zip Source avec une capture NUMBER TO IMG
Source avec Zip Source avec une capture VOTEMEMBERS POUR PHPMYTEAM 2.0
Source avec Zip Source avec une capture PHPMYTEAM 2.0 : MODULE SEARCHMEMBERS

 Sources de la même categorie

Source avec Zip GÉNÉRER UN MOT DE PASS ALÉATOIRE par narkos2
UNICODE TO HTML ENTITIES par CrazyShooter
Source avec Zip DÉBUTANT : FONCTION POUR TRANSFORMER UN TEMPS EN SECONDES EN... par MonkeyIsBack
FONCTION QUI GÉNÈRE UN CODE GRÂCE À L'ORTOGRAPHE ET LA PRONO... par foofymany
Source avec Zip TRADUCTION DE FICHIERS DE LANGUE AVEC GOOGLE GTRANSLATE par madislak

Commentaires et avis

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

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é

Commentaire de lyon le 23/08/2004 11:00:17

Vous connaissez pas la fonction rot_13?

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...

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.

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

Commentaire de defkrie le 28/08/2004 11:32:59

explique comment tu trouves 256 possibilitées

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

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.

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...

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

Commentaire de azerty2100 le 27/09/2004 13:40:35

idee original

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 ;-)

@++

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 ;-)

++

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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,640 sec (3)

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