Unité de cryptage/décryptage par xor.

Soyez le premier à donner votre avis sur cette source.

Vue 16 139 fois - Téléchargée 1 243 fois

Description

Voici deux fonctions qui permet de Crypter/Décrypter une Chaine ou un Fichier avec une Clé...

Source / Exemple :


unit Cryptage;

interface
uses Classes, SysUtils;

function Crypt(entree:AnsiString; cle:AnsiString):AnsiString;
function FileCrypt(Source : AnsiString; Destination : AnsiString; Cle : AnsiString):boolean;

implementation

function Crypt(entree:AnsiString; cle:AnsiString):AnsiString;
var
  I,J,LongEntree,LongCle,VResult : integer;
  VEntree,VCle : ^byte;
  VBuffer: ^AnsiChar;
  buffer : AnsiString;
begin
  LongEntree := length(entree);
  LongCle := length(Cle);

  If (LongEntree > 0) and (LongCle > 0) then begin

    setlength(buffer,LongEntree);

    for I:= 1 to LongEntree do begin
      for J := 1 to LongCle do begin
        VEntree := @Entree[I];
        VCle := @Cle[J];
        VResult := VEntree^ xor VCle^;
        VBuffer := @VResult;
        Buffer[I] := VBuffer^;
      end;
    end;
  end;
  if Buffer <> '' then result := buffer else Result := '';
end;

function FileCrypt(Source : AnsiString; Destination : AnsiString; Cle : AnsiString):boolean;
var
  FSource, Fdest :TFileStream;
  Buffer: array[1..1024] of integer;
  VCle : ^integer;
  nblu : integer;
  I,J, LongCle : integer;
begin
  If (FileExists(Source)) and (Cle <> '') then begin
    LongCle := Length(Cle);
    try
      FSource := TFileStream.Create(Source,fmOpenRead);
      FDest := TFileStream.Create(Destination, fmCreate);

      while FSource.Position < FSource.Size do begin
        nblu := FSource.Read(Buffer, 1024);
        For I:= 1 to nblu do begin
          For J:= 1 to LongCle do begin
            VCle := @Cle[J];
            Buffer[I] := Buffer[I] xor VCle^;
          end;
        end;
        FDest.Write(Buffer,nblu);
      end;
      Result := True;
    finally
      FSource.Free;
      FDest.Free;
    end;
  end else Result := False;
end;

end.

Conclusion :


La deuxième version est là ^^
La première fonction permet de crypter une chaine quelque soit sa taille, ensuite la deuxième fonction permet de crypter un fichier.

Peut être une troisème version avec des commentaires, ca dépend si vous en avez besoin :p (ca prend du temp)

J' ai joint un fichier zip, dedans vous avez bien sur l' unité et en plus un petit programme qui l' utilise.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
jnspunk Messages postés 16 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 février 2007
10 févr. 2007 à 18:15
For J:= 1 to LongCle do begin
VCle := @Cle[J];

je t'invite à regarder de nouveau ce passage :)
En fait cela crypte entierement le texte par le premier caractère de la clé, puis le deuxième, puis le troisième... jusqu' au dernier.
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
3 oct. 2005 à 11:31
J'ai pas telecharger ta source mais a en voir ton code,ya une grosse faille.

Tu fait un boucle qui parcoure ta chaine jusque la ok, par contre après tu fait une boucle qui parcour ta clé, tu fait un Xor du caractère de ton buffer lu, par le caractère de la clé lu, et après tu incremente la position de ta clé sans incrementé celui de ton buffer.

En un mot quelque soit la clé que tu mette, seul le dernier caractère va crypter ta chaine.

Si ton champs source est : "ceci est un test de cryptage" et que ta clé est "MACLE" alors seul le E va compter, si tu met comme clé "XXE" çà fera pareil normalement !

Cordialement.

Damien
kanader6 Messages postés 4 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 1 janvier 2005
11 nov. 2004 à 13:31
super code, simple et efficace :)
Inekman Messages postés 291 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 30 juin 2006
20 août 2004 à 14:29
j'ai vu que t'as rajouté une tite fonction pour les fichiers, je trouve ta réaction immédiate excellente.

Je ne peux pas la tester encore malheureusement car j'ai pu mon pc jusqu'à fin août (36 15 Ma vie).

Mais sache que je te filerai un commentaire dès mon retour à la maison.

Inekman.
jnspunk Messages postés 16 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 février 2007
17 août 2004 à 00:21
j' attend vos commentaires :p
Afficher les 7 commentaires

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.