CryptDecode with modifier CRYPT_ARCH_ZIP - How to use? - ページ 4

 
sanyooooook:
そうすると、通常のアーカイバの出力と比較されます。

で、何が問題なんだ?

CryptEncode()で 作成したZIPがデコードされれば、何が問題かは明らかではないでしょ うか?

 

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関数が 与えるのはzip-archiveの一部だけで、残りは自分で作成しなければなりません。しかし、問題は、標準的なZIPアーカイバとCryptEncodeの間でアーカイブの部分さえ一致しないことです。

とにかく、月曜日を待っています。私たちに不足している情報を与えてくれるのは、MQだけです。

 
C-4:

Mikhailさん、Alexanderさんの投稿をよく読んでみてください。


ですから、MQからの独自フォーマットはありません。CryptEncode関数が与えるものは、zipアーカイブの一部に過ぎず、残りは自分で作成する必要があります。しかし、問題は、標準的なZIPアーカイバとCryptEncodeの間でアーカイブの部分さえ一致しないことです。

とにかく、月曜日を待っています。私たちに不足している情報を与えてくれるのはMQだけです。

だから、ヘッダーを飛ばして、データだけを読めばいいんだ!

Google it = PKWare データ圧縮ライブラリ ヘッダー

 
Mikalas:

で、何が問題なんだ?

CryptEncode()で 作成したZIPがデコードされれば、何が問題なのかは明らかではない でしょうか?

CryptoDecodeの後に来るものと、通常のアーカイバの後に来るものは構造が異なる
 

ここで、私が行った実験をいくつか紹介します。

in the file: The quick brown fox jumps over the lazy dog茶色いきつねがのんびりした犬を飛び越える。

ファイル:「すばしっこいキツネは怠け者の犬を飛び越える

オンファイル:SDFGHGJDFGGGHGHGJK,G

 
は、MQが独自の出力構造を持っていることがわかりました。
 

バシリー!

MQL5でヘッダーのないZIPが作成される!

その結果、読み取り時に読み飛ばすことがない。

ググる=PKWareデータ圧縮ライブラリヘッダ

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

MQは圧縮方式が1つしかないため

ZIPが異なる圧縮方式を使用している場合、解凍することはできません。

つまり、すべてのZIPアーカイブが利用できるわけではありません。

 
sanyooooook:
MQは独自の出力構造を持っています。

それ自身」でなければ、ZIPとはまったく関係がないのです。

圧縮率によって、圧縮されたデータの構造は異なりますが、異なることはありえません。そのため、CryptDecodeは 特定の圧縮率やその他の必要なパラメータを記述したキーによって、何らかの形で管理されなければならない。キーを正しく設定する方法は、MQだけが知っています。

ミカラス

バシリー!

MQL5でヘッダーのないZIPが作成される!

ミハイル、あなたは自分が何を言っているのか理解する必要があります。問題は、ヘッダーやファイル形式ではありません。この記事を注意深く読んでください。

 
C-4:

それ自身」でなければ、ZIPとはまったく関係がないのです。

圧縮率によって、圧縮されたデータの構造は異なりますが、異なることはありえません。そのため、CryptDecodeは特定の圧縮率やその他のパラメータを記述したキーで何らかの管理をする必要があります。キーを正しく設定する方法は、MQだけが知っています。

ミハイル 何が問題なのかを理解する必要があります。問題は、ヘッダーやファイル形式ではありません。スレッドをよく読んでください。

そして、自分が何を望んでいるかを正しく述べる。

スレッドの冒頭に、コードがありますね。

アーカイブを丸ごと 読んで、ヘッダーと 一緒に解読しようとしているんですね!?

標準的なパッカーで作成されたZIPアーカイブには、HEADERがあります!

MQL5のアンパッカーは、ヘッダーをスキップ しません。

そのため、データの解凍はできません。

では、説明してください。

当初は、何が欲しいのか?

理由: