CryptDecode с модификатором CRYPT_ARCH_ZIP - Как использовать? - страница 4

 
sanyooooook:
ну он так и делает, а после сравнивает с тем что получается после штатного архиватора

Так в чём проблема?

Если, ZIP созданный  CryptEncode() декодируется, то разве не ясно в чём дело?

 

У MQ свой формат!

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

 Всё работает, если создаёшь архив из MQL5

Но этот архив не распаковывается стандартным ZIP!!! 

 
Mikalas:

У MQ свой формат!

 Всё работает, если создаёшь архив из MQL5

Но этот архив не распаковывается стандартным ZIP!!! 

Михаил, читайте внимательно пост Александра:

sanyooooook:

ZIP-архив эта целая структура, функция же архивирует\разархивирует массив, т.е. сувать туда нужно только готовый для деархивации массив.

грубо говоря, разархивирует только то, что получается на выходе архивирующей функции.


Т.е. нет никакого собственного формата от MQ. Просто то что дает вам функция CryptEncode - это лишь часть зип-архива, оставшуюся часть необходимо создать самостоятельно. Но проблема в том, что не совпадают даже части архивов между стандартным зип архиватором и CryptEncode.

В общем, ждем понедельника. Только MQ может дать не достающую нам информацию. 

 
C-4:

Михаил, читайте внимательно пост Александра:


Т.е. нет никакого собственного формата от MQ. Просто то что дает вам функция CryptEncode - это лишь часть зип-архива, оставшуюся часть необходимо создать самостоятельно. Но проблема в том, что не совпадают даже части архивов между стандартным зип архиватором и CryptEncode.

В общем, ждем понедельника. Только MQ может дать не достающую нам информацию. 

Так пропустите Header и читайте только данные!

Погуглите = PKWare data compression library header 

 
Mikalas:

Так в чём проблема?

Если, ZIP созданный  CryptEncode() декодируется, то разве не ясно в чём дело?

структура, у того что получается после CryptoDecode и того что получается после штатного архиватора, разная
 

вот сделал несколько экспериментов:

в файле: The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dog

в файле: The quick brown fox jumps over the lazy dog

в файле: sdfgghjdfggfghjghghjk,g

 
выходит что у MQ своя структура на выходе.
 

Василий!

MQL5 создаёт ZIP без заголовка! 

Соответственно, при чтении, не пропускает его. 

Погуглите = PKWare data compression library header  

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

У MQ только один метод компрессии, поэтому,

если ZIP будет с другим методом, то вы не сможете его распаковать.

Т.е не все ZIP архивы будут Вам доступны! 

 
sanyooooook:
выходит что у MQ своя структура на выходе.

Не может она быть "своей", иначе это не имеет отношение к ZIP вообще.

Структуры упакованных данных будут различаться в зависимости от степени сжатия, они не могут НЕ различаться. Следовательно, CryptDecode должна как-то управляться ключом, в котором описывается конкретная степень сжатия и прочие необходимые параметры. Как правильно сконфигуривать ключ знает только MQ.

Mikalas:

Василий!

MQL5 создаёт ZIP без заголовка! 

 Михаил, Вам необходимо понять о чем речь. Проблема не в заголовке и не в формате файла. Внимательно читайте ветку.

 
C-4:

Не может она быть "своей", иначе это не имеет отношение к ZIP вообще.

Структуры упакованных данных будут различаться в зависимости от степени сжатия, они не могут НЕ различаться. Следовательно, CryptDecode должна как-то управляться ключом, в котором описывается конкретная степень сжатия и прочие параметры. Как правильно сконфигуривать ключ знает только MQ.

 Михаил, Вам необходимо понять о чем речь. Проблема не в заголовке и не в формате файла. Внимательно читайте ветку.

Тогда правильно излагайте то, что Вы хотите.

В начале Вашего топика приведён код.

Вы читаете архив полностью и вы пытаетесь его декодировать вместе с заголовком

У любого ZIP архива, созданного стандартным запаковщиком, есть ЗАГОЛОВОК! 

Распаковщик MQL5 НЕ пропускает заголовок

Поэтому Вы и не можете распаковать данные. 

Так поясните:

Изначально что Вам НУЖНО? 

Причина обращения: