CryptDecode com modificador CRYPT_ARCH_ZIP - Como usar?

 

A verdadeira questão é esta. Pelo que entendi, estamos falando de embalagem/desembalagem de zíperes. É algo mega útil, mas não posso usá-lo, a função CryptDecode teima em dar resultado zero no arquivo zip de teste:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   uchar array[];
   uchar key[]={0};
   uchar result[];
   int handle = FileOpen("link.zip", FILE_READ|FILE_BIN|FILE_COMMON);
   FileReadArray(handle, array);
   FileClose(handle);
   int d = CryptDecode(CRYPT_ARCH_ZIP, array, key, result);
   printf(GetLastError());
   printf("Read totals: " + (string)ArraySize(array));
  }

Talvez algo mais deva ser especificado como chave, ou eu tenho uma idéia errada sobre o valor do modificador CRYPT_ARCH_ZIP. Em qualquer caso, a documentação não contém um exemplo da função, o que dificulta a compreensão de como ela funciona. A função GetLastError escreve 4001 - Unexpected Internal Error (Erro Interno Inesperado).

 
C-4:

A verdadeira questão é esta. Pelo que entendi, estamos falando de embalagem/desembalagem de zíperes. É algo mega útil, mas não posso usá-lo, a função CryptDecode teima em dar resultado zero no arquivo zip de teste:

Talvez algo mais deva ser especificado como uma chave, ou eu tenho uma idéia errada sobre o valor do modificador CRYPT_ARCH_ZIP. Em qualquer caso, a documentação não contém um exemplo da função, o que dificulta a compreensão de como ela funciona. A função GetLastError escreve 4001 - Unexpected Internal Error (Erro Interno Inesperado).

abordagem errada
 
sanyooooook:
não é a abordagem correta
Mais detalhes se você puder.
 

Um arquivo ZIP é toda uma estrutura, mas a função arquiva/ desarquiva uma matriz, ou seja, apenas uma matriz pronta para desarquivar deve ser colocada lá.

Grosso modo, ela desarquiva apenas a saída da função de arquivamento.

 
C-4:
Mais detalhes se você puder.
Ou o que em
link.zip
foi criado pela função de arquivo?
 
sanyooooook:

Um arquivo ZIP é toda uma estrutura, mas a função arquiva/ desarquiva uma matriz, ou seja, apenas uma matriz pronta para desarquivar deve ser colocada lá.

Grosso modo, ela desarquiva apenas a saída da função de arquivamento.

Entendi. Estilo MQ. Mas o principal é decifrar o fecho. Por acaso ninguém tem uma biblioteca para trabalhar com arquivos zip em MQL?
 
sanyooooook:
ou o que em
foi criado pela função de arquivo?
Não, diz zero. CryptDecode decodifica zip. Tentou criar um arquivo zip - as respostas do CryptEncode não correspondem às dos arquivadores regulares. O arquivo zipado do CryptEncode é muito mais curto, o que confirma indiretamente sua teoria!
 
aqui está uma descrição da estrutura do arquivo http://blog2k.ru/archives/3391
Описание формата ZIP файла
  • 2014.05.29
  • Евгений Жирнов (jirnov@gmail.com)
  • blog2k.ru
ZIP файл состоит из трех областей: сжатые/несжатые данные, (последовательность структур Local File Header, сами данные и необязательных Data descriptor)центральный каталог (последовательность структур Central directory file header)описание центрального каталога (End of central directory record) С начала файла идет набор из Local File Header...
 
C-4:
Não, diz zero. CryptDecode decodifica zip. Tentei criar um arquivo zip, CryptEncode e os arquivadores normais não correspondiam. CryptEncode torna o arquivo zipado muito mais curto, o que confirma indiretamente sua teoria!

Não é uma teoria, é apenas que eles estão acostumados a ter tudo pronto para ir no arquivador,

Pensei insensatamente que isso iria deszipar arquivos feitos com um arquivador normal.

 

O problema é que não consigo encontrar as ocorrências de matriz de bytes dadas pelo CryptEncode em um arquivo zip normal.

O arquivo é o mesmo. Assim, em um clássico arquivo zip, deve haver um byte-array correspondente ao byte-array do CryptEncode

 
C-4:

O problema é que não consigo encontrar as ocorrências de matriz de bytes dadas pelo CryptEncode em um arquivo zip normal.

), então você está olhando para o lado errado.
Razão: