Certains fichiers jpg cryptés nécessitent une clé pour être visionnés. L'algorythme de cryptage est basé sur l'utilisation de Xor. Il est très facile de le trouver...
J'ai adapté ce code en Delphi à partir d'une source en VB parue en février 2002 dans l'excellent magazine "Pirates Mag" (n° 10), dans le cadre d'un article traitant précisément du décryptage de ces JPG.
Donc, si vous avez égaré la clé de décryptage que vous aviez payée la peau des fesses, tout n'est pas perdu...
Vous pourrez à nouveau visionner ces images de rêve représentant des paysages sublimes, les fonds marins, la faune et la flore de notre planète, etc... ;)
Le code qui suit lit et écrit byte par byte directement dans les fichiers. Il n'est donc pas des plus rapides, et je travaille sur une version utilisant TFileSteam.
J'en avais fait un programme avec progression, temps restant estimé, tout ça, mais il faut que je le reprenne.
Je joindrai bientôt un zip pour la mise en oeuvre, je n'ai pas le temps pour l'instant.
A suivre, donc...
ATTENTION : si vous utilisez la première méthode (sans passer par TFileStream), et que vous travaillez à partir de fichiers en lecture seule (ReadOnly), n'oubliez pas de passer par une procédure qui enlève cette propriété. Voir en Annexe ci-dessous (mise à jour: 06/11/03, code précédent faux).
Pour la mise en application, voir ici :
http://www.delphifr.com/code.aspx?ID=17510
Source / Exemple :
{ 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;
Conclusion :
Voila, j'ai balancé tout ça un peu vite, en réponse à une question du forum.
J'espère qu'il n'y a pas trop de bêtises, sinon, n'hésitez pas... hein ?
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.