CryptDecode avec modificateur CRYPT_ARCH_ZIP - Comment l'utiliser ? - page 4

 
sanyooooook:
Eh bien, il le fait, et ensuite il le compare à la sortie de l'archiveur régulier.

Alors quel est le problème ?

Si le ZIP créépar CryptEncode() est décodé, le problème n'est-il pas clair ?

 

MQ a son propre format !

   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() );
     } 
   }

Tout fonctionne si vous créez une archive à partir de MQL5

Mais cette archive n'est pas décompressible avec le ZIP standard ! !!

 
Mikalas:

MQ a son propre format !

Tout fonctionne si vous créez une archive à partir de MQL5

Mais cette archive n'est pas décompressée avec le ZIP standard ! !!

Michael, lisez attentivement le message d'Aleksander :

sanyooooook:

L'archive ZIP est une structure entière, la fonction archive/désarchive un tableau, c'est-à-dire que seul un tableau prêt à être désarchivé doit être placé là.

En gros, il ne désarchive que la sortie de la fonction d'archivage.


C'est-à-dire qu'il n'existe pas de format natif de MQ. Ce que la fonction CryptEncode vous donne n'est qu'une partie de l'archive zip, le reste doit être créé par vous-même. Mais le problème est que même les parties des archives entre l'archiveur zip standard et CryptEncode ne correspondent pas.

Bref, j'attends lundi. Seul MQ peut nous donner les informations qui nous manquent.

 
C-4:

Mikhail, lisez attentivement le post d'Alexander :


Il n'y a donc pas de format propriétaire de MQ. Ce que la fonction CryptEncode vous donne est juste une partie de l'archive zip, le reste vous devez le créer vous-même. Mais le problème est que même les parties des archives entre l'archiveur zip standard et CryptEncode ne correspondent pas.

Quoi qu'il en soit, nous attendons lundi. Seul MQ peut nous donner les informations qui nous manquent.

Alors sautez l'en-tête et lisez uniquement les données !

Google it = En-tête de bibliothèque de compression de données PKWare

 
Mikalas:

Alors quel est le problème ?

Si le ZIP créépar CryptEncode() se décode, le problème n'est-il pas clair ?

La structure de ce qui vient après CryptoDecode et ce qui vient après l'archiveur normal est différente
 

voici quelques expériences que j'ai faites :

dans le dossier : Le renard brun saute par-dessus le chien paresseuxLe renard brun saute par-dessus le chien paresseux

en dossier : Le renard brun et rapide saute par-dessus le chien paresseux

dans le dossier : sdfgghghjdfggfghjghghghghjk,g

 
il s'avère que MQ a sa propre structure de sortie.
 

Vasiliy !

MQL5 crée un ZIP sans en-tête !

Par conséquent, il ne le saute pas lors de la lecture.

Googling = En-tête de bibliothèque de compression de données PKWare

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

MQ n'a qu'une seule méthode de compression, donc

si un ZIP utilise une méthode de compression différente, vous ne pourrez pas le décompresser.

En d'autres termes, toutes les archives ZIP ne seront pas disponibles pour vous !

 
sanyooooook:
MQ a sa propre structure de sortie.

Elle ne peut pas être "propre", sinon elle n'a rien à voir avec la ZIP.

Les structures des données emballées seront différentes en fonction du taux de compression, elles ne peuvent PAS être différentes. Par conséquent, CryptDecode doit être géré d'une manière ou d'une autre par une clé qui décrit le taux de compression particulier et d'autres paramètres nécessaires. Seul MQ sait comment configurer correctement la clé.

Mikalas:

Vasiliy !

MQL5 crée un ZIP sans en-tête !

Mikhail, vous devez comprendre ce dont vous parlez. Le problème ne vient pas de l'en-tête ou du format du fichier. Lisez attentivement cet article.

 
C-4:

Elle ne peut pas être "propre", sinon elle n'a rien à voir avec la ZIP.

Les structures des données emballées seront différentes en fonction du taux de compression, elles ne peuvent PAS être différentes. Par conséquent, CryptDecode doit être géré d'une manière ou d'une autre par une clé qui décrit le taux de compression spécifique et d'autres paramètres. Seul MQ sait comment configurer correctement la clé.

Mikhail, vous devez comprendre quel est le problème. Le problème ne vient pas de l'en-tête ou du format du fichier. Lisez attentivement le fil de discussion.

Ensuite, énoncez correctement ce que vous voulez.

Au début de votre fil, vous avez le code.

Vous avez lu l'archive dans son intégralité et vous essayez de la décoder en même temps que l'en-tête!

Toute archive ZIP, créée avec un emballeur standard, possède un HEADER !

Le décompresseur MQL5 ne saute pas l'en-tête.

Par conséquent, vous ne pouvez pas déballer les données.

Alors, explique :

Au départ, que voulez-vous ?