Cryptage en cesar comprennant tous les symboles ascii

Soyez le premier à donner votre avis sur cette source.

Vue 17 067 fois - Téléchargée 857 fois

Description

Bon bah voila, mon premier post, surement pas le dernier.
Ce programme crypte et decrypte une chaine de caractère grace a l'algorithme "cesar" qui consiste je le rappelle a crypter grace a une clé numérique, un court exemple valant mieux qu'une longue explication :
a avec la clé 1 donne b
a avec la clé 2 donne c etc ...

Source / Exemple :


/////////////////////
// PARTIE CRYPTAGE //
/////////////////////
function cesar_cryptage(chaine_decryptee:string; decallage:integer ): string;
var
taille_chaine : integer;
tableau_new_chr : array of char;
i:integer;
x_ascii,y_ascii:byte;
x:char;
chaine_tempo:string;

begin

taille_chaine := length(chaine_decryptee);
SetLength(tableau_new_chr, taille_chaine+1);

for i:=1 to taille_chaine+1 do
    begin

    x:=chaine_decryptee[i];
    x_ascii :=ord(x);
    y_ascii :=(x_ascii+decallage )mod 255; //la valeur ascii de la lettre considérée est
                                                     //ajoutée a la valeur de la clé puis congrue

    tableau_new_chr[i]:= chr(y_ascii);              //maj du tableau des caracteres.
end;

    for i:= 1 to  taille_chaine do                  //ajout de tous les char du tableau dans
    begin                                           //chaine tempo qui sera le result lorsqu'il aura été complété.
    chaine_tempo := chaine_tempo + tableau_new_chr[i];
    end;
result := chaine_tempo;

end;

///////////////////////
// PARTIE DECRYPTAGE //
///////////////////////
function cesar_decryptage(chaine_cryptee:string; decallage:integer ): string;
var
taille_chaine : integer;                        
tableau_new_chr : array of char;
i:integer;
x_ascii,y_ascii:byte;
x:char;
chaine_tempo:string;
begin
taille_chaine := length(chaine_cryptee);
SetLength(tableau_new_chr, taille_chaine+1);

for i:=1 to taille_chaine+1 do
    begin

    x:=chaine_cryptee[i];
    x_ascii :=ord(x);
    y_ascii :=(x_ascii-decallage)mod 255;  // difference ici "-"

    tableau_new_chr[i]:= chr(y_ascii);
end;

    for i:= 1 to  taille_chaine do
    begin
    chaine_tempo := chaine_tempo + tableau_new_chr[i];
    end;
result := chaine_tempo;

end;

Conclusion :


pour tout renseignement ou pour me signaler bug ou autre : akni_kiteklat@hotmail.com
je n'ai pas "proteger" les entrées : d'ou les erreur si vous entrer des choses innoportunes (lettre dans l'edit clé etc)
Etant mon premier "vrai" programme, il est surement encombré de choses inutiles ou mal faites. :) n'hesitez pas a me corriger .
Voila juste la fonction peut etre utilisée. Thx pour les conseils
nb : la fonction décryptage n'est pas tres utiles :p du fait qu'elle ne fait qu'inverser la clé : exemple : avec le mot efg :
cesar_cryptage( def,1) = efg
cesar_decryptage(efg,1) = def
(il suffirai de prendre la fonction cesar_cryptage(efg,-1)) voila.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Aaron
Messages postés
116
Date d'inscription
lundi 29 juillet 2002
Statut
Membre
Dernière intervention
19 janvier 2009

J'ai essaye comme ça :

Var
S: String;
I, N, X: Integer;
Begin
// Si aucune clé n'est entrée.
If Key.Text='' Then Exit;
// Mettre A.Text en minuscules...
A.Text:=LowerCase(A.Text);
// Effacer B.Text
B.Text:='';
// Enlever les espace autour de A.Text.
A.Text:=Trim(A.Text);
// Caractères possibles.
S:='abcdefghijklmnopqrstuvwxyz';
// Convertir la clé en Int.
N:=StrToInt(Key.Text);
For I:=0 To A.GetTextLen-1 Do
Begin
// Modulo au cas où N>26
N:=N Mod 26;
// Valeur du caractère i en ascii...
X:=Ord(A.Text[I+1]);
// Si X est un espace...
If X<>32 Then
Begin
// Valeur du caractère ascii-97(a=97)+la clé...
B.Text:=B.Text+S[X-97+N];
End
// Ajouter l'espace dans la chaîne...
Else B.Text:=B.Text+' ';
End;

Mais ça ne marche pas dès que la clé>25 (et moins pour les grosse chaines, je comprend pas pourquoi...) :-/
cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Bon, comme j' ai essayé moi même de créer un mode de cryptage (elle est dans le commentaire de ma source sur le cryptage de VERNAM), je sais que la tâche n' est point facile, alors, je te félicite pour ton iniciative et, si tu as besoin d' aide pour créer une procédure dans une autre unit, jette un oeil sur mes sources, tu trouveras ce que tu cherches dans l' une d' elle ...
Kit3kl4t
Messages postés
4
Date d'inscription
mercredi 22 septembre 2004
Statut
Membre
Dernière intervention
1 décembre 2004

oups désolé pour le double post.
Pour te répondre mauricio, je sais que le Cesar est un cryptage vraiment peu fiable, facilement decryptable.
C'est dans le cadre d'un tpe et on commence par le plus simple ! Et puis j'avoue, je n'ai pas resisté à la tentation de poster un premier code :)
bon je vais de ce pas le modifier.Bye ! (thx moon :)
Kit3kl4t
Messages postés
4
Date d'inscription
mercredi 22 septembre 2004
Statut
Membre
Dernière intervention
1 décembre 2004

Merci pour les conseils et pour les critiques :)
je vais de ce pas regarder comment appeler une fonction à partir d'une autre unit (et oui je débute !:)
Kit3kl4t
Messages postés
4
Date d'inscription
mercredi 22 septembre 2004
Statut
Membre
Dernière intervention
1 décembre 2004

Merci pour les conseils et pour les critiques :)
je vais de ce pas regarder comment appeler une fonction à partir d'une autre unit (et oui je débute !:)

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.