CryptDecode mit Modifikator CRYPT_ARCH_ZIP - Wie verwenden? - Seite 4

 
sanyooooook:
Nun, das tut er, und dann vergleicht er sie mit der Ausgabe des regulären Archivierungsprogramms

Wo liegt also das Problem?

Wenn dasmit CryptEncode() erstellte ZIPentschlüsselt wird, ist dann nicht klar, wo das Problem liegt?

 

MQ hat sein eigenes 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() );
     } 
   }

Alles funktioniert, wenn Sie ein Archiv aus MQL5 erstellen

Aber dieses Archiv lässt sich nicht mit Standard-ZIP entpacken!!!

 
Mikalas:

MQ hat sein eigenes Format!

Alles funktioniert, wenn Sie ein Archiv aus MQL5 erstellen

Aber dieses Archiv wird nicht mit Standard-ZIP entpackt!!!

Michael, lesen Sie Aleksanders Beitrag aufmerksam:

sanyooooook:

Ein ZIP-Archiv ist eine ganze Struktur, die Funktion archiviert/entarchiviert ein Array, d.h. Sie sollten dort nur ein Array ablegen, das bereit ist, dearchiviert zu werden.

Grob gesagt, wird nur die Ausgabe der Archivierungsfunktion entarchiviert.


D.h. es gibt kein natives Format von MQ. Die Funktion CryptEncode gibt Ihnen nur einen Teil des Zip-Archivs, den Rest müssen Sie selbst erstellen. Aber das Problem ist, dass nicht einmal Teile von Archiven zwischen Standard-Zip-Archivierer und CryptEncode übereinstimmen.

Wie auch immer, ich warte auf Montag. Nur MQ kann uns die Informationen liefern, die uns fehlen.

 
C-4:

Mikhail, lesen Sie Alexanders Beitrag aufmerksam:


Es gibt also kein proprietäres Format von MQ. Die Funktion CryptEncode liefert Ihnen nur einen Teil des Zip-Archivs, den Rest müssen Sie selbst erstellen. Aber das Problem ist, dass nicht einmal Teile von Archiven zwischen Standard-Zip-Archivierer und CryptEncode übereinstimmen.

Wie auch immer, wir warten auf Montag. Nur MQ kann uns die Informationen liefern, die uns fehlen.

Überspringen Sie also die Überschrift und lesen Sie nur die Daten!

Google it = PKWare Datenkompressionsbibliothek Header

 
Mikalas:

Wo liegt also das Problem?

Wenn dasmit CryptEncode() erstellte ZIPentschlüsselt werden kann, ist dann nicht klar, wo das Problem liegt?

Die Struktur dessen, was nach CryptoDecode und was nach dem regulären Archivierungsprogramm kommt, ist unterschiedlich
 

Hier sind einige Experimente, die ich durchgeführt habe:

in der Datei: Der schnelle braune Fuchs springt über den faulen HundDer schnelle braune Fuchs springt über den faulen Hund

im Dossier: Der schnelle braune Fuchs springt über den faulen Hund

zu den Akten: sdfgghghjdfggfghjghghghjk,g

 
stellt sich heraus, dass MQ seine eigene Ausgabestruktur hat.
 

Wassilij!

MQL5 erstellt ein ZIP ohne Header!

Daher wird sie beim Lesen nicht übersprungen.

Googeln = PKWare Datenkompressionsbibliothek Header

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

MQ hat nur eine Komprimierungsmethode, so dass

Wenn ein ZIP eine andere Komprimierungsmethode verwendet, können Sie es nicht dekomprimieren.

D.h. nicht alle ZIP-Archive werden Ihnen zur Verfügung stehen!

 
sanyooooook:
MQ hat seine eigene Ausgabestruktur.

Es kann nicht "sein eigenes" sein, sonst hat es mit ZIP gar nichts zu tun.

Die Strukturen der gepackten Daten unterscheiden sich je nach Kompressionsverhältnis, sie können sich NICHT unterscheiden. Folglich muss CryptDecode in irgendeiner Weise durch einen Schlüssel verwaltet werden, der das jeweilige Kompressionsverhältnis und andere notwendige Parameter beschreibt. Nur MQ weiß, wie man den Schlüssel richtig konfiguriert.

Mikalas:

Wassilij!

MQL5 erstellt ein ZIP ohne Header!

Mikhail, du musst verstehen, wovon du sprichst. Das Problem liegt nicht in der Kopfzeile oder dem Dateiformat. Lesen Sie diesen Artikel aufmerksam.

 
C-4:

Es kann nicht "sein eigenes" sein, sonst hat es mit ZIP gar nichts zu tun.

Die Strukturen der gepackten Daten unterscheiden sich je nach Kompressionsverhältnis, sie können sich NICHT unterscheiden. Folglich muss CryptDecode irgendwie durch einen Schlüssel verwaltet werden, der das spezifische Kompressionsverhältnis und andere Parameter beschreibt. Nur MQ weiß, wie man den Schlüssel richtig konfiguriert.

Mikhail, Sie müssen verstehen, was das Problem ist. Das Problem liegt nicht in der Kopfzeile oder dem Dateiformat. Lesen Sie das Thema aufmerksam.

Dann geben Sie richtig an, was Sie wollen.

Am Anfang Ihres Threads haben Sie den Code.

Sie lesen das Archiv in seiner Gesamtheit und versuchen, es zusammen mit dem Header zu entschlüsseln!

Jedes ZIP-Archiv, das mit einem Standard-Packer erstellt wurde, hat einen HEADER!

DerMQL5-Entpacker überspringt NICHT den Header.

Daher können Sie keine Daten entpacken.

Also, erklären Sie:

Was wollen Sie zunächst?