带有修改器CRYPT_ARCH_ZIP的CryptDecode - 如何使用? - 页 5 12345678910 新评论 Vasiliy Sokolov 2015.03.28 21:23 #41 Mikalas:然后正确地说明你想要什么。在你的主题的开头有代码。你正在阅读整个 档案,你正试图用标题 来解码!这是不可能的。任何由标准打包器创建的ZIP档案都有一个HEADER!MQL5解包程序不跳过头。因此,你不能解压数据。那么,请解释一下。最初你需要的是什么?让我尝试最后一次解释。顶部窗口中的黄色矩形是由CryptEncode 包装的 "测试 "一词。下面的黄色矩形是由标准zip存档器包装的 "测试 "一词。问题是为什么这些矩形是不同的,以及如何使它们的内容相同。 Mikhail Filimonov 2015.03.28 21:36 #42 C-4:我将尝试最后一次解释。顶部窗口中的黄色矩形是用CryptEncode包装的 "测试 "一词。底部的黄色矩形是由标准zip存档器包装的 "测试 "字样。问题是为什么矩形是不同的,如何使它们的内容相等。因为使用的是不同的压缩方法http://tools.ietf.org/html/rfc1951 Alexandr Bryzgalov 2015.03.28 21: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 21:47 #44 该算法有设置。也许这与他们有关。然后你需要找出它们在MQL5中的作用。 Alexandr Bryzgalov 2015.03.28 21:48 #45 看起来,这些钥匙只对加密有效。 Alexandr Bryzgalov 2015.03.28 21:50 #46 TheXpert: 该算法有设置。也许这与他们有关。然后你需要找出它们在MQL5中的作用。拷问他们还是什么?他们会说我们是无赖,不知道归档算法如何运作 ) Vasiliy Sokolov 2015.03.28 22:23 #47 TheXpert: 该算法有设置。也许这与他们有关。然后你需要找出它们在MQL5中的作用。 该算法肯定要有一些设置,至少要有压缩率设置。你可以将这些设置传递给CryptDecode 的唯一地方是钥匙。如果它对钥匙不敏感,那么它就没有在使用它。这是不好的,因为在这种情况下,你既不能解压缩第三方档案,也不能打包你自己的档案供第三方存档器使用。 Vasiliy Sokolov 2015.03.28 22:26 #48 Mikalas:因为使用的是不同的压缩方法http://tools.ietf.org/html/rfc1951 迈克尔,让我们不要扮演 "明显的船长"。我们都知道zip是不同的,我们都知道什么是存档头。 Vasiliy Sokolov 2015.03.28 22:27 #49 sanyooooook:我们应该折磨他们吗?他们会说我们是无赖,不知道归档算法如何运作) 很可能是另一个粗略的功能,其中的功能被概述,但还没有实现。 Mikhail Filimonov 2015.03.29 02:32 #50 解开标准的ZIP文件!(目前,档案中只有一个打包的文件,以后我将为多个文件打包(如果需要) )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,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
然后正确地说明你想要什么。
在你的主题的开头有代码。
你正在阅读整个 档案,你正试图用标题 来解码!这是不可能的。
任何由标准打包器创建的ZIP档案都有一个HEADER!
MQL5解包程序不跳过头。
因此,你不能解压数据。
那么,请解释一下。
最初你需要的是什么?
让我尝试最后一次解释。
顶部窗口中的黄色矩形是由CryptEncode 包装的 "测试 "一词。下面的黄色矩形是由标准zip存档器包装的 "测试 "一词。问题是为什么这些矩形是不同的,以及如何使它们的内容相同。
我将尝试最后一次解释。
顶部窗口中的黄色矩形是用CryptEncode包装的 "测试 "一词。底部的黄色矩形是由标准zip存档器包装的 "测试 "字样。问题是为什么矩形是不同的,如何使它们的内容相等。
因为使用的是不同的压缩方法
http://tools.ietf.org/html/rfc1951
归档有问题
我用一个键归档,用另一个键解除归档,这很好。
还是密钥只用于加密?
该算法有设置。也许这与他们有关。然后你需要找出它们在MQL5中的作用。
拷问他们还是什么?
他们会说我们是无赖,不知道归档算法如何运作 )
该算法有设置。也许这与他们有关。然后你需要找出它们在MQL5中的作用。
因为使用的是不同的压缩方法
http://tools.ietf.org/html/rfc1951
我们应该折磨他们吗?
他们会说我们是无赖,不知道归档算法如何运作)
解开标准的ZIP文件!
(目前,档案中只有一个打包的文件,以后我将为多个文件打包(如果需要) )