CryptDecode con modificatore CRYPT_ARCH_ZIP - Come usare? - pagina 4

 
sanyooooook:
Beh, lo fa, e poi lo confronta con l'output dell'archiviatore regolare

Allora qual è il problema?

Se lo ZIP creatoda CryptEncode() viene decodificato, non è chiaro quale sia il problema?

 

MQ ha il suo formato!

   string file_name = "GAZR-6.15.dat";
   uchar array[];
   uchar key[];
   uchar result[];
   int a_handle = FileOpen( file_name, FILE_READ|FILE_BIN );
   if ( a_handle != INVALID_HANDLE )
   {
     uint array_size = FileReadArray( a_handle, array );
     if ( array_size > 0 )
     {
       ArrayResize( key, array_size );
       for ( int i = 0; i < int( array_size ); i++ ) key[i] = 0;
       int a_enc = CryptEncode( CRYPT_ARCH_ZIP, array, key, result );
       int b_handle = FileOpen( "test.zip", FILE_WRITE|FILE_BIN );
       if ( b_handle != INVALID_HANDLE )
       {
         FileWriteArray( b_handle, result );
         FileClose( b_handle );
       }  
       FileClose( a_handle );
     }  
   }
   
   
   
   
   int handle = FileOpen( "test.zip", FILE_READ|FILE_BIN );
   if ( handle != INVALID_HANDLE )
   {
     uint array_size = FileReadArray( handle, array );
     FileClose( handle );
     
     Print( "Read totals: ", array_size );
     ArrayResize( key, array_size );
     for ( int i = 0; i < int( array_size ); i++ ) key[i] = 0;
     //ArrayResize( result, array_size, array_size * 100 );
     
     ResetLastError();
     int d = CryptDecode( CRYPT_ARCH_ZIP, array, key, result );
   
    if ( d < 1 )
     {
       Print( GetLastError() );
     } 
   }

Tutto funziona se si crea un archivio da MQL5

Ma questo archivio non è scompattabile con lo ZIP standard!!!

 
Mikalas:

MQ ha il suo formato!

Tutto funziona se si crea un archivio da MQL5

Ma questo archivio non viene scompattato con lo ZIP standard!!!

Michael, leggi attentamente il post di Aleksander:

sanyooooook:

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

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


Cioè non c'è un formato nativo di MQ. Quello che la funzione CryptEncode ti dà è solo una parte dell'archivio zip, il resto lo devi creare tu. Ma il problema è che nemmeno le parti degli archivi tra l'archiviatore zip standard e CryptEncode corrispondono.

Comunque, aspettando lunedì. Solo MQ può darci le informazioni che ci mancano.

 
C-4:

Mikhail, leggi attentamente il post di Alexander:


Quindi non c'è un formato proprietario di MQ. Quello che la funzione CryptEncode ti dà è solo una parte dell'archivio zip, il resto lo devi creare tu. Ma il problema è che nemmeno le parti degli archivi tra l'archiviatore zip standard e CryptEncode corrispondono.

Comunque, aspettiamo lunedì. Solo MQ può darci le informazioni che ci mancano.

Quindi saltate l'intestazione e leggete solo i dati!

Google it = intestazione della libreria di compressione dati PKWare

 
Mikalas:

Allora qual è il problema?

Se lo ZIP creatoda CryptEncode() decodifica, non è chiaro quale sia il problema?

La struttura di ciò che viene dopo CryptoDecode e ciò che viene dopo l'archiviatore regolare è diversa
 

Ecco alcuni esperimenti che ho fatto:

nel file: The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dog

in file: La veloce volpe marrone salta il cane pigro

in archivio: sdfgghghjdfggfghjghghjghjk,g

 
si scopre che MQ ha una propria struttura di uscita.
 

Vasiliy!

MQL5 crea uno ZIP senza intestazione!

Di conseguenza, non lo salta durante la lettura.

Googling = intestazione della libreria di compressione dati PKWare

http://en.wikipedia.org/wiki/Zip_(file_format)

MQ ha solo un metodo di compressione, quindi

se uno ZIP utilizza un metodo di compressione diverso, non sarà possibile decomprimerlo.

Cioè non tutti gli archivi ZIP saranno disponibili per voi!

 
sanyooooook:
MQ ha la sua struttura di uscita.

Non può essere "suo", altrimenti non ha niente a che fare con la ZIP.

Le strutture dei dati impacchettati saranno diverse a seconda del rapporto di compressione, non possono NON essere diverse. Di conseguenza, CryptDecode deve essere in qualche modo gestito da una chiave che descrive il particolare rapporto di compressione e altri parametri necessari. Solo MQ sa come configurare correttamente la chiave.

Mikalas:

Vasiliy!

MQL5 crea uno ZIP senza intestazione!

Mikhail, devi capire di cosa stai parlando. Il problema non è l'intestazione o il formato del file. Leggete attentamente questo articolo.

 
C-4:

Non può essere "suo", altrimenti non ha niente a che fare con la ZIP.

Le strutture dei dati impacchettati saranno diverse a seconda del rapporto di compressione, non possono NON essere diverse. Di conseguenza, CryptDecode deve essere in qualche modo gestito da una chiave che descrive il rapporto di compressione specifico e altri parametri. Solo MQ sa come configurare correttamente la chiave.

Mikhail, devi capire qual è il problema. Il problema non è l'intestazione o il formato del file. Leggete attentamente il thread.

Poi dichiarate correttamente ciò che volete.

All'inizio del tuo thread hai il codice.

Hai letto l'archivio nella sua interezza e stai cercando di decodificarlo insieme all'intestazione!

Qualsiasi archivio ZIP, creato con un packer standard, ha un HEADER!

Lospacchettatore MQL5 NON salta l'intestazione.

Pertanto, non è possibile decomprimere i dati.

Quindi, spiega:

Inizialmente, cosa vuoi?

Motivazione: