带有修改器CRYPT_ARCH_ZIP的CryptDecode - 如何使用? - 页 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存档器和CryptEncode之间,甚至连档案的一部分都不匹配。

总之,等待周一的到来。只有MQ能给我们提供我们所缺少的信息。

 
C-4:

米哈伊尔,仔细阅读亚历山大的帖子。


因此,没有来自MQ的专有格式。只是CryptEncode函数给你的只是压缩文件的一部分,其余的你必须自己创建。但问题是,在标准zip存档器和CryptEncode之间,甚至连档案的一部分都不匹配。

无论如何,我们正在等待星期一。只有MQ能给我们提供我们所缺少的信息。

所以,跳过标题,只读数据吧!

Google it = PKWare数据压缩库头

 
Mikalas:

那么问题出在哪里?

如果由CryptEncode() 创建的ZIP能解码,那不就很清楚问题所在了吗?

在CryptoDecode之后的内容和普通存档器之后的内容的结构是不同的
 

这里是我做的一些实验。

文件:快速的棕色狐狸跳过懒惰的狗快速的棕色狐狸跳过懒惰的狗

文件:快速的棕色狐狸跳过懒惰的狗

存档:Sdfgghghjdfggfghjghghjk,g

 
事实证明,MQ有自己的输出结构。
 

Vasiliy!

MQL5创建一个没有头的ZIP!

因此,它在阅读时不会跳过它。

搜索= PKWare数据压缩库头

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

MQ只有一种压缩方法,所以

如果一个ZIP使用不同的压缩方法,你将无法解压它。

也就是说,并不是所有的ZIP档案都能为你所用。

 
sanyooooook:
MQ有自己的输出结构。

它不可能是 "自己的",否则它与ZIP完全没有关系。

打包数据的结构会因压缩率的不同而不同,它们不可能没有区别。因此,CryptDecode 必须以某种方式由一个描述特定压缩率和其他必要参数的密钥管理。只有MQ知道如何正确配置密钥。

Mikalas:

Vasiliy!

MQL5创建一个没有头的ZIP!

米哈伊尔,你需要明白你在说什么。问题不是出在文件头或文件格式上。仔细阅读这篇文章。

 
C-4:

它不可能是 "自己的",否则它与ZIP完全没有关系。

打包数据的结构会因压缩率的不同而不同,它们不可能没有区别。因此,CryptDecode必须以某种方式由一个描述具体压缩率和其他参数的密钥来管理。只有MQ知道如何正确配置密钥。

米哈伊尔,你需要了解问题是什么。问题不是出在文件头或文件格式上。仔细阅读该主题。

然后正确说明你想要什么。

在你的主题的开头,你有代码。

你阅读了档案的全部内容,并试图将其与标题 一起解码!

任何用标准打包器创建的ZIP档案,都有一个HEADER!

MQL5解包程序不跳过头

因此,你不能解压数据。

那么,请解释一下。

最初,你想要什么?