CryptDecode con modificador CRYPT_ARCH_ZIP - ¿Cómo utilizarlo? - página 4

 
sanyooooook:
Bueno, lo hace, y luego lo compara con la salida del archivador normal

¿Cuál es el problema?

Si el ZIP creadopor CryptEncode() se descodifica, ¿no está claro cuál es el problema?

 

¡MQ tiene su propio 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() );
     } 
   }

Todo funciona si se crea un archivo desde MQL5

Pero este archivo no se puede desempaquetar con el ZIP estándar.

 
Mikalas:

¡MQ tiene su propio formato!

Todo funciona si se crea un archivo desde MQL5

¡¡¡Pero este archivo no se descomprime con el ZIP estándar!!!

Michael, lee atentamente el post de Aleksander:

sanyooooook:

El archivo ZIP es una estructura completa, la función archiva/desarchiva un array, es decir, sólo debes poner allí un array que esté listo para ser desarchivado.

A grandes rasgos, sólo desarchiva la salida de la función de archivo.


Es decir, no hay un formato nativo de MQ. Lo que te da la función CryptEncode es sólo una parte del archivo zip, el resto lo tienes que crear tú. Pero el problema es que ni siquiera las partes de los archivos entre el archivador zip estándar y CryptEncode coinciden.

En fin, a la espera del lunes. Sólo MQ puede darnos la información que nos falta.

 
C-4:

Mikhail, lee atentamente el post de Alexander:


Por lo tanto, no existe un formato propio de MQ. Lo que te da la función CryptEncode es sólo una parte del archivo zip, el resto lo tienes que crear tú. Pero el problema es que ni siquiera las partes de los archivos entre el archivador zip estándar y CryptEncode coinciden.

De todos modos, estamos esperando el lunes. Sólo MQ puede darnos la información que nos falta.

Así que sáltate el encabezado y lee sólo los datos.

Buscar en Google = encabezado de la biblioteca de compresión de datos PKWare

 
Mikalas:

¿Cuál es el problema?

Si el ZIP creadopor CryptEncode() descodifica, ¿no está claro cuál es el problema?

La estructura de lo que viene después de CryptoDecode y lo que viene después del archivador normal es diferente
 

aquí hay algunos experimentos que he hecho:

en el expediente: El rápido zorro marrón salta sobre el perro perezosoEl rápido zorro marrón salta sobre el perro perezoso

en el archivo: El zorro marrón rápido salta sobre el perro perezoso

en el archivo: sdfgghghjdfggfghjghghjk,g

 
resulta que MQ tiene su propia estructura de salida.
 

¡Vasiliy!

¡MQL5 crea un ZIP sin cabecera!

Por lo tanto, no la omite al leer.

Googleando = cabecera de la biblioteca de compresión de datos PKWare

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

MQ sólo tiene un método de compresión, por lo que

si un ZIP utiliza un método de compresión diferente, no podrás descomprimirlo.

Es decir, no todos los archivos ZIP estarán disponibles para ti.

 
sanyooooook:
MQ tiene su propia estructura de salida.

No puede ser "propio", de lo contrario no tiene nada que ver con el PIC.

Las estructuras de los datos empaquetados serán diferentes dependiendo de la relación de compresión, no pueden NO ser diferentes. En consecuencia, CryptDecode debe ser gestionado de alguna manera por una clave que describa la relación de compresión particular y otros parámetros necesarios. Sólo MQ sabe cómo configurar correctamente la clave.

Mikalas:

¡Vasiliy!

¡MQL5 crea un ZIP sin cabecera!

Mikhail, tienes que entender de qué estás hablando. El problema no está en la cabecera ni en el formato del archivo. Lea atentamente este artículo.

 
C-4:

No puede ser "propio", de lo contrario no tiene nada que ver con el PIC.

Las estructuras de los datos empaquetados serán diferentes dependiendo de la relación de compresión, no pueden NO ser diferentes. En consecuencia, CryptDecode debe ser gestionado de alguna manera por una clave que describe la relación de compresión específica y otros parámetros. Sólo MQ sabe cómo configurar correctamente la clave.

Mikhail, tienes que entender cuál es el problema. El problema no está en la cabecera ni en el formato del archivo. Lee el hilo con atención.

A continuación, exponga correctamente lo que desea.

Al principio de tu hilo tienes el código.

Lees el archivo en su totalidad y tratas de descifrarlo junto con la cabecera.

¡Cualquier archivo ZIP, creado con un empaquetador estándar, tiene un HEADER!

El desempaquetador MQL5 NO omite la cabecera.

Por lo tanto, no se pueden descomprimir los datos.

Entonces, explíquese:

Al principio, ¿qué quieres?

Razón de la queja: