CryptDecode with modifier CRYPT_ARCH_ZIP - How to use? - ページ 5 12345678910 新しいコメント Vasiliy Sokolov 2015.03.28 22:23 #41 Mikalas:そして、自分が何を望んでいるかを正しく述べる。トピックの冒頭にコードがあります。アーカイブ全体を 読んでいるのに、ヘッダーで 解読しようとしているのか!標準的なパッカーで作成されたZIPアーカイブには、HEADERがあります!MQL5のアンパッカーは、ヘッダをスキップ しません。そのため、データの解凍はできません。では、説明してください。最初は何が必要なのか?最後にもう一度、説明させてください。トップウィンドウの黄色い四角は、CryptEncodeで パックされた「test」の文字です。下の黄色い四角は、標準的なZIPアーカイバでパックされた「test」という文字です。問題は、なぜ長方形が違うのか、そしてその内容を同じにするにはどうしたらいいのか、ということです。 Mikhail Filimonov 2015.03.28 22:36 #42 C-4:最後にもう一度説明します。トップウィンドウの黄色い四角は、CryptEncodeで詰めた「test」の文字です。下部の黄色い四角は、標準のZIPアーカイバでパックされた「test」の文字です。問題は、なぜ長方形が違うのか、どうすればその中身が均等になるのか、ということです。圧縮方式が異なるためhttp://tools.ietf.org/html/rfc1951 Alexandr Bryzgalov 2015.03.28 22:46 #43 アーカイブに異常があるあるキーでアーカイブし、別のキーでアンアーカイブするのですが、問題ありません。//+------------------------------------------------------------------+ //| ArrayToHex | //+------------------------------------------------------------------+ string ArrayToHex(uchar &arr[],int count=-1) { string res=""; //--- проверка размера if(count<0 || count>ArraySize(arr)) count=ArraySize(arr); //--- преобразование в шестнадцатиричную строку for(int i=0; i<count; i++) res+=StringFormat("%.2X",arr[i]); //--- return(res); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { string text="sdfgghjdfggfghjghghjk,g"; string keystr="asgfgfdfgfghjhjmhjmfhjmhjmhjmhjmhjhj"; uchar src[],dst[],key[]; //--- подготовка ключа шифрования StringToCharArray(keystr,key); //--- подготовка исходного массива src[] StringToCharArray(text,src); //--- вывод исходных данных PrintFormat("Initial data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src)); //--- шифрование массива src[] методом DES с 56-битным ключом key[] int res=CryptEncode(CRYPT_ARCH_ZIP,src,key,dst); keystr="asgfgfdfg"; StringToCharArray(keystr,key); //--- проверка результата шифрования if(res>0) { //--- вывод шифрованных данных PrintFormat("Encoded data: size=%d %s",res,ArrayToHex(dst)); //--- расшифровка данных массива dst[] методом DES с 56-битным ключом key[] res=CryptDecode(CRYPT_ARCH_ZIP,dst,key,src); //--- проверка результата if(res>0) { //--- вывод дешифрованных данных PrintFormat("Decoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src)); } else Print("Ошибка в CryptDecode. Код ошибки=",GetLastError()); } else Print("Ошибка в CryptEncode. Код ошибки=",GetLastError()); } それとも鍵は暗号化のみに使用されるのでしょうか? TheXpert 2015.03.28 22:47 #44 アルゴリズムに設定があります。もしかしたら、彼らのことかもしれません。それなら、MQL5ではどうなっているのかを調べる必要があります。 Alexandr Bryzgalov 2015.03.28 22:48 #45 鍵は暗号化のみ有効なようです。 Alexandr Bryzgalov 2015.03.28 22:50 #46 TheXpert: アルゴリズムに設定があります。もしかしたら、彼らのことかもしれません。それなら、MQL5ではどうなっているのかを調べる必要があります。拷問か何か?アーカイブのアルゴリズムの仕組みを知らない悪党と言われそうですが ) Vasiliy Sokolov 2015.03.28 23:23 #47 TheXpert: アルゴリズムに設定があります。もしかしたら、彼らのことかもしれません。それなら、MQL5ではどうなっているのかを調べる必要があります。 アルゴリズムは、少なくとも圧縮率の設定など、必ず何らかの設定をしているはずです。これらの設定をCryptDecodeに 渡すことができるのは、キーだけです。キーに感応しないのであれば、そのキーは使われていないことになります。この場合、サードパーティのアーカイブを展開することも、サードパーティのアーカイバで使用するために独自のアーカイブをパックすることもできないので、これは悪いことです。 Vasiliy Sokolov 2015.03.28 23:26 #48 Mikalas:圧縮方式が異なるためhttp://tools.ietf.org/html/rfc1951 マイケル、「Captain Obvious」ごっこはやめましょうよ。ZIPは違うし、アーカイブヘッダーが何なのかはみんな知っている。 Vasiliy Sokolov 2015.03.28 23:27 #49 sanyooooook:拷問すべきなのか?アーカイブのアルゴリズムの仕組みを知らない悪党と言われそうですが......。) また、機能概要が決まっていて、まだ実装されていない粗悪な機能である可能性が高い。 Mikhail Filimonov 2015.03.29 04:32 #50 標準的なZIPファイルを解凍することができます。(今は、アーカイブの中の1つのパックされたファイルだけですが、後で、(必要なら)複数のファイルに対して作るつもりです)string file_name = ""; uchar array[]; uchar key[]; uchar result[]; //--- int handle = FileOpen( "GAZR-6.15.zip", FILE_READ|FILE_BIN ); //Здесь имя Вашего файла и гдe лежит! if ( handle != INVALID_HANDLE ) { FileSeek( handle, 18, SEEK_SET ); long pack_unp_size = FileReadLong( handle ); long pack_size = ( pack_unp_size & 0xFFFFF ); long unp_size = ( pack_unp_size >> 32 ); long names_len = FileReadLong( handle ); long fn_len = ( names_len & 0xFF ); long extr_fild_len = ( ( names_len & 0xFF00 ) >> 8 ); FileSeek( handle, 30, SEEK_SET ); uint fn_res = FileReadArray( handle, array, 0, int( fn_len ) ); if ( fn_res == uint( fn_len ) ) { for ( int i = 0; i < int( fn_res ); i++ ) { file_name += CharToString( array[i] ); } } if ( extr_fild_len != 0 ) { FileSeek( handle, 30 + fn_len + extr_fild_len, SEEK_SET ); } else { FileSeek( handle, 30 + fn_len, SEEK_SET ); } //--- ArrayResize( array, int( pack_size ) + 6 ); uint ar_res = FileReadArray( handle, array, 2, int( pack_size ) ); if ( ar_res == uint( pack_size ) ) { array[0] = 120; array[1] = 94; array[int( pack_size ) + 2] = 193; array[int( pack_size ) + 3] = 12; array[int( pack_size ) + 4] = 31; array[int( pack_size ) + 5] = 159; ArrayResize( key, int( pack_size ) + 6 ); for ( int i = 0; i < int( pack_size ) + 6; i++ ) key[i] = 0; ResetLastError(); int dec_res = CryptDecode( CRYPT_ARCH_ZIP, array, key, result ); if ( dec_res == int( unp_size ) ) { Print( "Data unpack! File name = ", file_name ); } else { Print( GetLastError() ); } } FileClose( handle ); } 12345678910 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そして、自分が何を望んでいるかを正しく述べる。
トピックの冒頭にコードがあります。
アーカイブ全体を 読んでいるのに、ヘッダーで 解読しようとしているのか!
標準的なパッカーで作成されたZIPアーカイブには、HEADERがあります!
MQL5のアンパッカーは、ヘッダをスキップ しません。
そのため、データの解凍はできません。
では、説明してください。
最初は何が必要なのか?
最後にもう一度、説明させてください。
トップウィンドウの黄色い四角は、CryptEncodeで パックされた「test」の文字です。下の黄色い四角は、標準的なZIPアーカイバでパックされた「test」という文字です。問題は、なぜ長方形が違うのか、そしてその内容を同じにするにはどうしたらいいのか、ということです。
最後にもう一度説明します。
トップウィンドウの黄色い四角は、CryptEncodeで詰めた「test」の文字です。下部の黄色い四角は、標準のZIPアーカイバでパックされた「test」の文字です。問題は、なぜ長方形が違うのか、どうすればその中身が均等になるのか、ということです。
圧縮方式が異なるため
http://tools.ietf.org/html/rfc1951
アーカイブに異常がある
あるキーでアーカイブし、別のキーでアンアーカイブするのですが、問題ありません。
それとも鍵は暗号化のみに使用されるのでしょうか?
アルゴリズムに設定があります。もしかしたら、彼らのことかもしれません。それなら、MQL5ではどうなっているのかを調べる必要があります。
拷問か何か?
アーカイブのアルゴリズムの仕組みを知らない悪党と言われそうですが )
アルゴリズムに設定があります。もしかしたら、彼らのことかもしれません。それなら、MQL5ではどうなっているのかを調べる必要があります。
圧縮方式が異なるため
http://tools.ietf.org/html/rfc1951
拷問すべきなのか?
アーカイブのアルゴリズムの仕組みを知らない悪党と言われそうですが......。)
標準的なZIPファイルを解凍することができます。
(今は、アーカイブの中の1つのパックされたファイルだけですが、後で、(必要なら)複数のファイルに対して作るつもりです)