Soyez le premier à donner votre avis sur cette source.
Snippet vu 41 382 fois - Téléchargée 33 fois
{ Byte par byte } procedure DecodeFile(const FromFileName, ToFileName: string); var FCod, FDeCod: file of Byte; Tmp, Key: Byte; begin AssignFile(FCod, FromFileName); try Reset(FCod); Read(FCod, Tmp); Key := Tmp xor 255; // calcul de la clé de cryptage Seek(FCod, 0); AssignFile(FDeCod, ToFileName); try ReWrite(FDeCod); while not EOF(FCod) do begin Read(FCod, Tmp); Tmp := Tmp xor Key; Write(FDeCod, Tmp); end; finally CloseFile(FDeCod); end; finally CloseFile(FCod); end; end; { Avec TFileSteam } procedure DecodeFileStream(const FromFileName, ToFileName: string); var FSCod, FSDeCod: TFileStream; Tmp, Key: Byte; i: Integer; begin FSCod := TFileStream.Create(FromFileName, fmOpenRead); try FSCod.Read(Key, 1); Key := Key xor 255; // calcul de la clé de cryptage FSCod.Seek(0, 0); FSDeCod := TFileStream.Create(ToFileName, fmCreate); try for i := 0 to FSCod.Size - 1 do begin FSCod.Read(Tmp, 1); Tmp := Tmp xor Key; FSDeCod.Write(Tmp, 1); end; finally FSDeCod.Free; end; finally FSCod.Free; end; end; { Supprimer la propriété ReadOnly d'un fichier (mise à jour: 06/11/03, code précédent faux) } var Attribut: Integer; FichierEnco_D: String; // le fichier à lire begin Attribut := FileGetAttr(FichierEnco_D); // récupère attributs if Attribut and faReadOnly <> 0 then // si lecture seule... FileSetAttr(FichierEnco_D, Attribut and not faReadOnly); // ...supprime ReadOnly end;
12 mars 2010 à 16:20
Est ce possible de les decrypter ???
Merci d'avance a tous !!!
24 août 2006 à 00:20
Je testerai à fond... plus tard... fatigué...
Ben, euh... fais de beaux rêves, Cirec ^^
23 août 2006 à 23:57
cette procedure est vraiment la plus rapide de toutes :
procedure DecodeMemoryStreamBlock(const FromFileName, ToFileName: string);
var
Key,
PosPointer: LongWord;
Buffer : Array[1..1024] of Byte;
MStream: TMemoryStream;
NbALire, NbLu, TotalLu : LongInt;
i: Integer;
begin
MStream := TMemoryStream.Create;
try
MStream.LoadFromFile(FromFileName);
MStream.Seek(0, soFromBeginning);
MStream.Read(Key, 4);
Key := Key xor $E0FFD8FF;
MStream.Seek(0, soFromBeginning);
TotalLu := 0;
NbALire := SizeOf(Buffer);
Repeat
If (TotalLu + NbALire) > MStream.Size Then NbALire := MStream.Size - TotalLu;
PosPointer := MStream.Position;
NbLu := MStream.Read(Buffer, NbALire);
For I:= 1 to NbLu do
Buffer[I] := Buffer[I] Xor Key;
MStream.Position := PosPointer;
MStream.WriteBuffer(Buffer, NbLu);
TotalLu := TotalLu + NbLu;
Until TotalLu >= MStream.Size;
MStream.SaveToFile(ToFileName);
finally
MStream.Free;
end;
end;
Bonne nuit ;-)
@+
Cirec
23 août 2006 à 22:35
que la mienne ???
je vais essayer un mix des deux ...
@+
Cirec
23 août 2006 à 16:39
J'ai repris ce code car il était vraiment mal foutu et me faisait honte. Son seul intérêt est de montrer le mécanisme du cryptage par xor.
Quant au problème de la rapidité, il est résolu dans un code posté ultérieurement, grâce à Shining et à TMemoryStream.
Mais ta manière de procéder m'intéresse, elle est en quelque sorte à mi chemin entre BlockRead et FileStream, et je vais l'étudier de plus près.
Sinon, j'en ai deux autres en réserve, il va falloir que je compare les performances...
Une version assez rapide :
procedure DecodeFileBlocks(const FromFileName, ToFileName: string);
var
OldF, NewF: file;
Buffer: array[0..1023] of Byte;
FilePointer: LongInt; // pointeur de position dans le fichier
BytesRead: Integer;
i: Integer;
Key: Byte;
begin
AssignFile(OldF, FromFileName);
try
Reset(OldF, 1);
BlockRead(OldF, Buffer, SizeOf(Buffer), BytesRead);
Key := Buffer[0] xor 255;
Seek(OldF, 0);
AssignFile(NewF, ToFileName);
try
Rewrite(NewF, 1);
while not Eof(OldF) do
begin
FilePointer := FilePos(OldF);
BlockRead(OldF, Buffer, SizeOf(Buffer), BytesRead);
for i := 0 to BytesRead - 1 do
Buffer[i] := Buffer[i] xor Key;
Seek(NewF, FilePointer);
BlockWrite(NewF, Buffer, BytesRead);
end;
finally
CloseFile(NewF);
end;
finally
CloseFile(OldF);
end;
end;
Une version ultra rapide :
procedure DecodeMemoryStream(const FromFileName, ToFileName: string);
var
Tmp,
Key,
PosPointer: LongWord;
MStream: TMemoryStream;
begin
MStream := TMemoryStream.Create;
try
MStream.LoadFromFile(FromFileName);
MStream.Seek(0, soFromBeginning);
MStream.Read(Tmp, 4);
Key := Tmp xor $E0FFD8FF;
MStream.Seek(0, soFromBeginning);
while MStream.Position < MStream.Size do
begin
PosPointer := MStream.Position;
MStream.Read(Tmp, 4);
Tmp := Tmp xor Key;
MStream.Position := PosPointer;
MStream.Write(Tmp, 4);
MStream.Position := PosPointer + 4;
end;
MStream.SaveToFile(ToFileName);
finally
MStream.Free;
end;
end;
Quoi qu'il en soit, voilà un beau catalogue des manières de lire et écrire dans les fichier, c'est presque un tutoriel, lol...
A +
japee
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.