Bonjour à tous,
Je cherche à lire un fichier zippé et crypté (7Zip, mode ZipCrypto).
De nombreux sites et forums donnent des exemples pour crypter un fichier mais peu pour le décryptage.
Mes recherches m'ont amené à https://www.uweraabe.de/Blog/2017/03...rd-encryption/
En utilisant l'unité fournie et mon code :
Le nom du fichier est bien trouvé, le tZipHeader me retourne bien un nombre d'octets décompressés et compressés cohérents, mais Memo1.Lines.LoadFromStream(DecompressionStream); me retourne systématiquement le défaut "DataError".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 procedure TForm1.Button1Click(Sender: TObject); var myZipFile: TEncryptedZipFile; DecompressionStream: TStream; zh: TZipHeader; nIdx: integer; sComponent: string; begin Memo1.Clear; myZipFile := nil; if TZipFile.IsValid(sFileName) then begin try myZipFile := TEncryptedZipFile.Create(sPassword); DecompressionStream := TStream.Create; myZipFile.Open(sFileName, zmRead); // Recherche des fichiers for nIdx := 0 to myZipFile.FileCount - 1 do begin sComponent := myZipFile.FileNames[nIdx]; Memo1.Lines.Add(sComponent); myZipFile.Read(sComponent, DecompressionStream, zh); Memo1.Lines.Add(intToStr(DecompressionStream.size)); Memo1.Lines.Add(intToStr(zh.UncompressedSize)); Memo1.Lines.Add(intToStr(zh.CompressedSize)); if DecompressionStream.size > 0 then begin DecompressionStream.Seek(soFromBeginning, 0); Memo1.Lines.LoadFromStream(DecompressionStream); end; end; myZipFile.Close; finally myZipFile.Free; DecompressionStream.Free; end; end; end;
Suis-je en erreur sur la lecture du fichier, le décryptage (j'ai moi même crypté le fichier, donc pas de doute sur le Password) ou sur le transfert du tStream vers le tMemo ?
Merci pour votre aide.
Belle journée à tous.
Partager