Chiffre de cesar

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 169 fois - Téléchargée 20 fois

Contenu du snippet

Hello all !
Comme j'ai eu besoin recement d'une implementation du chiffre de Cesar en php et que les codes que j'ai trouves sur phpcs etaient des uzines a gaz (desole pour les auteurs, ce n'est pas contre vous), j'ai ecris cette petite fonction qui fait tout comme une grande ;-)
Rien de palpitant ni de tres complique, je mets le source ici juste au cas ou quelqu'un soit un jour dans la meme situation que moi et cherche un truc pas complique et fonctionnel :p

Source / Exemple :


<?php
#########################################################
#				CHIFFRE DE CESAR						#
#														#
#		$Msg : texte a crypter/decrypter				#
#		$Clef : offset a applique						#
#		$Action : TRUE = crypter; FALSE = decrypter		#
#########################################################
function Cesar($Msg, $Clef, $Action)
{
	$Charset = 'abcdefghijklmnopqrstuvwxyz';
	$CharsetLen = strlen($Charset);

	$MsgLen = strlen($Msg);
		
	// Au cas ou la clef ne serait pas valide (qu'elle depasse la longueur du charset ou qu'elle soit inferieur a 0 - ce qui n'est pas super utile :p)
	if ( ($Clef > $CharsetLen) || ($Clef < 0) )
		return FALSE;
		
	// Boucle de traitement
	for ( $i=0; $i<$MsgLen; $i++ )
	{
		// Evalue la position de la lettre dans le charset
		if ( ($Pos = strpos($Charset, $Msg[$i])) !== FALSE )
		{
			if ( $Action )
			{
				if ( ($Result = $Pos + $Clef) > $CharsetLen )
					$Result = $Result - $CharsetLen;
			}	
			else
			{
				if ( ($Result = $Pos - $Clef) < 0 )
					$Result = $CharsetLen - ($Result * (-1)); 
			}		
			$Msg[$i] = $Charset[$Result];
		}			
	}
	return $Msg;
}
?>

Conclusion :


Exemple en pratique :
<?php
$String = 'salut';
echo Cesar($String, 12, TRUE);
?>

Effectuera une substitution de 12 lettres sur le mot 'salut'. Attention par contre aux caracteres non pris en compte dans le charset(espace, caracateres accentues, ect ...) ! Pensez a modifier celui-ci si jamais vous desirez ne pas trie vos entrees.

Au niveau du code, j'ai fait de mon mieux mais je le repetete, rien de palpitant en somme. En ce qui concerne la securite, il est evident que ce type de securite (si on peut appeller sa comme sa tellement c'est faible) est a proscrire imperativement, c'est juste pour l'exemple. N'allait pas me dire que AES, DES RSA & companie sont mieux, je le sais bien ;-)

@++ et bon coding ^^

A voir également

Ajouter un commentaire

Commentaires

malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Hello :-)
Aucune idée de ce qu'est le chiffre de César, mais c'est correctement codé :-)
2 chose simplement : tu devrais prendre l'habitude de typer tes variables. Enfin, "tu devrais"...non, c'est toi qui vois :-) Mais perso, j'aime bien voir par exemple : $sMsg, parce que je sais de suite que c'est une variable de type string, ou $iPos, parce que je sais de suite que c'est une variable de type int.
Mais c'est juste une habitude...
Le 2d truc : je suis nul en math ... mais vraiment nul hein. Mais $Result * (-1), c'est pas équivalent à -$Result ?

Sinon c'est bien, pas pompeux, clair, concis...bien :-)
cs_jean84
Messages postés
450
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009
-
Hello

Merci pour ton commentaire ;-)
Le chiffre de Cesar, c'est un algo de substitution de lettre dans une phrase. Le mieux est que tu regardes ce site : http://www.apprendre-en-ligne.net/crypto/cesar/index.html, il t'expliquera surement mieux que moi.

Je multiplie $Result par -1 pour le rendre positif car il est forcement negatif dans le bout de code que tu indiques. Cela viendrait effectivement a faire un --$Result donc un +$Result mais par habitude, mieux vaut multiplier par -1.

"Le 2d truc : je suis nul en math ... mais vraiment nul hein"
Je parie que je suis encore plus nul que toi, et c'est pas une blague :-( lol

Pour le typage des var, c'est vrai que c'est mieux. Je le fait pourtant quand je fais du C/C++ mais en php, j'ai pas encore l'habitude. J'avais deja remarque sur tes codes que tu le faisais, mais j'arrive pas a l'integrer dans mes codes (surtout quand je travail avec DOM et XPATH... je vois pas ce que je pourrais mettre pour indiquer le type). Il me manque une declaration avant (j'ai commence par le C donc il me faut un int, char ou n'importe quoi d'autres). Je sais que c'est idiot mais je vais quand meme essayer de faire un efort a l'avanenir.

@++
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
28 -
mais ca sert a quoi de coder ca ? (on en voit partout : ici, sur javascriptfr ect...) alors que ca se casse en meme pas une demie seconde... j'ai code un truc en cpp pour le casser...
FhX
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
# if ( $Action )
# {
# if ( ($Result = $Pos + $Clef) > $CharsetLen )
# $Result = $Result - $CharsetLen;
# }
# else
# {
# if ( ($Result = $Pos - $Clef) < 0 )
# $Result = $CharsetLen - ($Result * (-1));
# }

$Result = ( $Action && ( ($Pos + $Clef) > $CharsetLen ) ) ?
($Pos + $Clef) - $CharsetLen :
( !$Action && ( ($Pos - $Clef) < 0 ) ) ?
$CharsetLen - ( -($Pos - $Clef) ) :
NULL;

Qu'est ce que je peux arriver à faire des trucs aussi moche des fois :D
FhX
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
Ah si, fallait bien que je sorte un truc spécial optimisation de ouf qui change pas grand chose :D

$MsgLen strlen($Msg);
> à mettre dans la déclarative du for() :p


J'ai pas pu m'en empécher :(

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.