CYCY07
Messages postés67Date d'inscriptionjeudi 19 mai 2011StatutMembreDernière intervention22 mai 2006
-
5 janv. 2006 à 23:11
CYCY07
Messages postés67Date d'inscriptionjeudi 19 mai 2011StatutMembreDernière intervention22 mai 2006
-
7 janv. 2006 à 21:54
Bonsoir, je dois réaliser un petit programme qui me pernet de crypter/décrypter un mot à partir de la méthode de Jules César, le hic c'est que dans mon code lorsque j'encode une clé j'ai remarqué qu'il confond la lettre S et Z.
Exemple:
Mot à crypter: VANDALISME
Clé:7
Mot crypté: CHUKHSPGTL
or la bonne solution est : CHUKHSPZTL
la lettre S doit avoir avec une clé de +7 comme cryptage la lettre Z et dans mon code il m'indique que c'est la lettre G
Je ne trouve vraiment pas l'erreur
Voici la partie du code:
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 6 janv. 2006 à 03:44
un petit soucis si la clef est égale à 0 où 26 ... donc correction :
procedure TF_Substitution
.Button1Click
(Sender
: TObject
);
var
i
:integer
;
Xascii
,Yascii
:byte
;
x
:char
;
tcle
:integer
;
begin
LbCrypt
.Caption
:=
'';
LbDecrypt
.Caption
:= EMot
.text
;
Lchaine
:= length
(EMot
.text
);
SetLength
(tableau_new_chr
, Lchaine
+1);
TCle
:= strtoint
(ECle
.text
);
for i
: =1
to Lchaine
do
begin
x
:= EMot
.text
[i
];
Xascii
:=ord
(x
)- Ord('@'); // Ord('@') 64 donc A 1 et Z = 26
Yascii
:=
(Xascii
+ TCle
)
Mod
26;
// 26 Lettres
If Yascii
=
0
Then Yascii
:=
26;
tableau_new_chr
[i
]:= chr
(Yascii
+ Ord
('@'));
end ;
for i
: =
1
to Lchaine
do
begin
LbCrypt
.caption
:= LbCrypt
.caption
+ tableau_new_chr
[i
];
end;
end;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 7 janv. 2006 à 03:32
il suffit de faire l'opération inverse de rajouter 26 si non on risque d'obtenir un résultat négatif. Pour l'espace c'est un autre problème il a comme code ASCII 32 donc pour le crypter sur une base de ['A'..'Z'] + Clé ça va être dur
ABCDEFGHIJKLMNOPQRSTUVWXYZ
||||||||||||||||||||||||||
TUVWXYZABCDEFGHIJKLMNOPQRS//+7ce n'est pas impossible mais ce ne sera plus un cryptage de Jules Ceasar (à mon avis) puisqu'il faudra élargir le champ au delà des 26 caractères de l'alphabet. Ex 32 + 7 39 Chr(39)" ' "
voilà c'est tout ce que je sais
Pour décrypter essaye ceci :
procedure TF_Substitution
.Button2Click
(Sender
: TObject
);
var
i
:integer
;
Xascii
,Yascii
:byte
;
x
:char
;
tcle
:integer
;
begin
LbCrypt
.Caption
: =
'';
LbDecrypt
.Caption
:= '';
Lchaine
:= length
(EMot
.text
);
SetLength
(tableau_new_chr
, Lchaine
+1);
TCle
:= strtoint
(ECle
.text
);
for i
: =1
to Lchaine
do
begin
x
:= EMot
.text
[i
];
// Le Mot Crypté
Xascii
:=ord
(x
)- Ord
('@');
Yascii
:=
((Xascii
- TCle
)+
26)
Mod
26;
If Yascii
=
0
Then Yascii
:=
26;
tableau_new_chr
[i
]:= chr
(Yascii
+ Ord
('@'));
end ;
for i
: =
1
to Lchaine
do
begin
LbDecrypt
.caption
:= LbDecrypt
.caption
+ tableau_new_chr
[i
];
end ;
EMot
.Text
: = LbDecrypt
.caption
;
end;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 6 janv. 2006 à 03:26
Un peut plus simple à comprendre :
procedure TF_Substitution
.Button1Click
(Sender
: TObject
);
var
i
:integer
;
Xascii
,Yascii
:byte
;
x
:char
;
tcle
:integer
;
begin
LbCrypt
.Caption
:=
'';
LbDecrypt
.Caption
:= EMot
.text
;
Lchaine
:= length
(EMot
.text
);
SetLength
(tableau_new_chr
, Lchaine
+1);
TCle
:= strtoint
(ECle
.text
);
for i
: =1
to Lchaine
do
begin
x
:= EMot
.text
[i
];
Xascii
:=ord
(x
)- Ord
('A');
Yascii
:=
(Xascii
+ TCle
)
Mod
26;
// 26 Lettres
If Yascii
=
0
Then Yascii
:=
26;
tableau_new_chr
[i
]:= chr
(Yascii
+ Ord
('A'));
end ;
for i
: =
1
to Lchaine
do
begin
LbCrypt
.caption
:= LbCrypt
.caption
+ tableau_new_chr
[i
];
end;
end;
@+
Cirec
Vous n’avez pas trouvé la réponse que vous recherchez ?
CYCY07
Messages postés67Date d'inscriptionjeudi 19 mai 2011StatutMembreDernière intervention22 mai 2006 6 janv. 2006 à 23:26
J'ai un petit soucis avec le code, en cryptant il n'y a pas de problème mais en décryptant il y a un soucis, la lettre C à décrypter toujours clé 7 m'indique la lettre Ê, j'ai appliqué votre deuxième code qui est en effet plus simple, voici ce que ça donne en décryptage:
begin
LbCrypt.Caption := '';
LbDecrypt.Caption:='';
Lchaine := length(EMot.text);
SetLength(tableau_new_chr, Lchaine+1);
TCle := strtoint(ECle.text);
for i:=1 to Lchaine do
begin
x:=EMot.text[i];
Xascii :=ord(x)- Ord([mailto:'@' '@']);
Yascii := (Xascii + TCle) Mod 26;
If Yascii = 0 Then Yascii := 26;
tableau_new_chr[i]:= chr(Yascii - Ord([mailto:'@' '@']));
end;
for i:= 1 to Lchaine do
begin
LbDecrypt.caption := LbDecrypt.caption + tableau_new_chr[i];
end;
CYCY07
Messages postés67Date d'inscriptionjeudi 19 mai 2011StatutMembreDernière intervention22 mai 2006 6 janv. 2006 à 23:32
De plus, je dois pouvoir appliquer le même code en considérant cette fois que l'on utilise 26 caractère alphabétiques tjrs en majuscule ainsi que le blanc donc modulo 27, Serait il possible de m'expliquer ce qui change lors de la codification décodification mis à part le modulo?? J'ai du mal à suivre, pourtant ça parrait si simple ...
Merci encore pour votre aide
Cycy
CYCY07
Messages postés67Date d'inscriptionjeudi 19 mai 2011StatutMembreDernière intervention22 mai 2006 7 janv. 2006 à 15:51
Encore milles merci!! Pour le cryptage en effet, je dois employer la méthode de substitution donc je ne pense pas non plus que cela soit possible je t'en remercie quand même, je vais essayer de me débrouiller avec les données que vous m'avez donné et puis on verra bien...
CYCY07
Messages postés67Date d'inscriptionjeudi 19 mai 2011StatutMembreDernière intervention22 mai 2006 7 janv. 2006 à 21:50
Il n'est donc pas possible d'appliquer ce code donc des 26 lettres alphabétiques+espace sous la méthode de substitution ?? J'ai essayé mais je n'y arrive pas non plus, décidémment le cryptage c'est pas mon domaine... Ce n'est pas possible de passer donc du code Ascii 032 à 065----->090???
Il y a 27 caractères, si je ne tiens pas compte des codes entre le 032 ET le 034 ça pourrait marcher non ?? Tout en continuant à appliquer le même code que pour l'exemple ci-dessus??? Car en gros ça reprend mon exemple mais avec SP en plus ...
CYCY07
Messages postés67Date d'inscriptionjeudi 19 mai 2011StatutMembreDernière intervention22 mai 2006 7 janv. 2006 à 21:54
Petite erreur, en ne tenant pas compte des ASCII 033 à 064, il me serait peut être possible d'appliquer le code... Mais ce serait alors Modulo 27 et le hic c qu'il y aurait un décalage pour tout alors???
ou alors à chaque boucle de la chaine , je pourrais faire Clé+1??
Vous en pensez quoi??