CryptDecode con modificatore CRYPT_ARCH_ZIP - Come usare?

 

La vera domanda è questa. Da quanto ho capito, stiamo parlando di impacchettare/disimballare l'array di zip. È una cosa mega utile, ma non posso usarla, la funzione CryptDecode dà ostinatamente zero risultati sull'archivio zip di prova:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   uchar array[];
   uchar key[]={0};
   uchar result[];
   int handle = FileOpen("link.zip", FILE_READ|FILE_BIN|FILE_COMMON);
   FileReadArray(handle, array);
   FileClose(handle);
   int d = CryptDecode(CRYPT_ARCH_ZIP, array, key, result);
   printf(GetLastError());
   printf("Read totals: " + (string)ArraySize(array));
  }

Forse qualcos'altro deve essere specificato come chiave, o ho un'idea sbagliata sul valore del modificatore CRYPT_ARCH_ZIP. In ogni caso, la documentazione non contiene un esempio della funzione, il che rende difficile capire come funziona. La funzione GetLastError scrive 4001 - Unexpected Internal Error.

 
C-4:

La vera domanda riguarda il sottotitolo. Da quanto ho capito, stiamo parlando di impacchettare/disimballare l'array di zip. È una cosa mega utile, ma non posso usarla, la funzione CryptDecode dà ostinatamente zero risultati su un archivio zip di prova:

Forse qualcos'altro deve essere specificato come chiave, o ho un'idea sbagliata sul valore del modificatore CRYPT_ARCH_ZIP. In ogni caso, non c'è nessun esempio di come usare la funzione nella documentazione, il che rende molto più difficile capire come funziona. La funzione GetLastError scrive 4001 - Unexpected Internal Error.

approccio sbagliato
 
sanyooooook:
non è l'approccio giusto
Più dettagli se puoi.
 

L'archivio ZIP è un'intera struttura, ma la funzione archivia/disarchivia un array, cioè solo un array pronto per la disarchiviazione dovrebbe essere messo lì.

In parole povere, disarchivia solo l'output della funzione di archiviazione.

 
C-4:
Più dettagli se puoi.
O cosa in
link.zip
è stato creato dalla funzione di archivio?
 
sanyooooook:

Un archivio ZIP è un'intera struttura, ma la funzione archivia/disarchivia un array, cioè solo un array pronto per la disarchiviazione dovrebbe essere messo lì.

In parole povere, disarchivia solo l'output della funzione di archiviazione.

Capito. Stile MQ. La cosa principale però è decifrare lo zip. Qualcuno ha per caso una libreria per lavorare con gli archivi zip in MQL?
 
sanyooooook:
o cosa in
è stato creato dalla funzione archivio?
No, dice zero. CryptDecode decodifica zip. Ho provato a creare un archivio zip - le risposte di CryptEncode non corrispondono a quelle degli archiviatori regolari. Il file zippato di CryptEncode è molto più corto, il che conferma indirettamente la tua teoria!
 
ecco una descrizione della struttura del file http://blog2k.ru/archives/3391
Описание формата ZIP файла
  • 2014.05.29
  • Евгений Жирнов (jirnov@gmail.com)
  • blog2k.ru
ZIP файл состоит из трех областей: сжатые/несжатые данные, (последовательность структур Local File Header, сами данные и необязательных Data descriptor)центральный каталог (последовательность структур Central directory file header)описание центрального каталога (End of central directory record) С начала файла идет набор из Local File Header...
 
C-4:
No, dice zero. CryptDecode decodifica zip. Ho provato a creare un archivio zip, CryptEncode e gli archiviatori normali non corrispondono. CryptEncode rende il file zippato molto più corto, il che conferma indirettamente la tua teoria!

Non è una teoria, è solo che sono abituati ad avere tutto pronto nell'archivio,

Ho stupidamente pensato che avrebbe decomprimuto i file fatti con un normale archiviatore.

 

Il problema è che non riesco a trovare le occorrenze dell'array di byte dato da CryptEncode in un normale archivio zip.

Il file è lo stesso. Quindi in un classico archivio zip, ci dovrebbe essere un byte-array corrispondente al byte-array CryptEncode

 
C-4:

Il problema è che non riesco a trovare le occorrenze dell'array di byte dato da CryptEncode in un normale archivio zip.

), quindi stai guardando nel modo sbagliato.