cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
25 févr. 2007 à 10:35
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
26 févr. 2007 à 16:55
Bonjour à tous.
Je suis en train de faire une fonction de cryptage xor en Turbo Pascal 7.
Seul petit problème : il ne veut pas ajouter le caractère crypter dams tmp...
J'ai essayé 2 fois, rien ne fonctionne ! (C'est une erreur type missmatch)
function Crypto(S:String;Key:String) : String;
var lS : Integer;
var lK : Integer;
var pS : Integer;
var pK : Integer;
var cS : Byte;
var cK : Byte;
var cTmp : Char;
var Tmp : String;
begin
lS := Length(S);
lK := Length(Key);
pS := 1;
pK := 1;
for pS := 1 to lS do;
begin
inc(pK,1);
if pK > lK then;
begin
pk := 1;
end;
cS := ord(S[pS]);
cK := ord(Key[pK]);
cTmp := cS xor cK
Tmp := concat(Tmp,Chr(cTmp)); { <- Cette ligne ne fonctionne pas ...}
Tmp := Tmp + Chr(cTmp); { <- Et celle-là non plus !}
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 25 févr. 2007 à 20:43
Evidemment qu'il est possible d'optimiser cette fonction !
Cependant, ne connaissant pas les limites de Turbo Pascal, je me suis contenté de lui donner sa réponse.
Par contre, à quoi sert la variable Tmp, autant utiliser directement Result (ou alors Crypto puisque TP ne permet peut être pas cette méthode).
Et sinon, ut peux aussi éviter l'affectation en appelant SetLength() puisque la valeur affectée à Tmp (Tmp := S) n'est jamais utilisée.
D'où : (pas testé mais ça doit être OK)
function Crypto(const S, Key : String) : String;
var
nS, nK: Integer;
begin
SetLength(Crypto, Length(S));
nK := 1;
for nS := 1 to lS do
begin
Crypto[nS] := Chr(Ord(S[nS]) xor Ord(Key[nK]));
Inc(nK,1);
if nK > lK then
nK := 1;
end;
end;
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 26 févr. 2007 à 16:55
ta réponse est tout a fait bonne sauf que certaines var n'étaient pas déclarées ni utilisées ...
voici la version corrigée (un soupcon) :
function Crypto(const S, Key : String) : String;
var
lS, lK: Integer;
nS, nK: Integer;
begin
lS:=Length(S);
lK:=Length(Key);
SetLength(Crypto, lS);
nK := 1;
for nS := 1 to lS do
begin
Crypto[nS] := Chr(Ord(S[nS]) xor Ord(Key[nK]));
Inc(nK,1);
if nK > lK then
nK := 1;
end;
end;