Unité de cryptage/décryptage par xor.

Soyez le premier à donner votre avis sur cette source.

Vue 15 681 fois - Téléchargée 1 173 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
Messages postés
16
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
10 février 2007

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.
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
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
Messages postés
4
Date d'inscription
jeudi 9 octobre 2003
Statut
Membre
Dernière intervention
1 janvier 2005

super code, simple et efficace :)
Messages postés
291
Date d'inscription
dimanche 2 février 2003
Statut
Membre
Dernière intervention
30 juin 2006

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.
Messages postés
16
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
10 février 2007

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.