CryptDecode с модификатором CRYPT_ARCH_ZIP - Как использовать? - страница 3

 
Mikalas:

Василий!

А архив не "битый"? 

Нет, не битый. Сделанный мной лично через 7zip для теста.

Саня правильно заметил: CryptDecode декодирует только сжатую часть архива, но как его заставить декодировать эту сжатую часть остается загадкой. 

 

Выложите

7zip и просто zip 

Может быть 7zip не поддерживается? 

 
Mikalas:

Выложите

7zip и просто zip 

Упаковщик - 7zip, архив - zip. Другие упаковщики дают тот же самый результат. Можете проверить сами. Берем любой файл, запаковываем любым упаковщиком зип. Получившийся архив (.zip) пробуем распаковать CrypеDecode. - Получаем ошибку распаковки. Но вопрос даже не в ошибки распаковки целого архива, вопрос, как сконфигурировать CryptDecode, что бы он смог распаковать упакованный раздел из zip архива.
 
C-4:
Упаковщик - 7zip, архив - zip. Другие упаковщики дают тот же самый результат. Можете проверить сами. Берем любой файл, запаковываем любым упаковщиком зип. Получившийся архив (.zip) пробуем распаковать CrypеDecode. - Получаем ошибку распаковки. Но вопрос даже не в ошибки распаковки целого архива, вопрос, как сконфигурировать CryptDecode, что бы он смог распаковать упакованный раздел из zip архива.

:)

У вас файл не открывается!

сделаейте

if ( handle != INVALID_HANDLE )
 
C-4:
вопрос, как сконфигурировать CryptDecode, что бы он смог распаковать упакованный раздел из zip архива.

может поможет

http://blog2k.ru/archives/3392

Чтение ZIP файла
  • 2014.06.04
  • Евгений Жирнов (jirnov@gmail.com)
  • blog2k.ru
Алгоритм получения данных из ZIP файла: находим запись EOCDзагружаем записи Central directory file headerдля каждой Central directory file header, находим и загружаем Local File Headerданные располагаются сразу после Local File Header, иногда размер данных записывается после самих данных в структуру Data descriptor, об этом сигнализирует флаг...
 

Василий!

Вы не правильно делали, но и правильно тоже не работает:(

Неожиданная внутренняя ошибка: 

uchar array[];
   uchar key[];
   uchar result[];
   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;
     ResetLastError();
     int d = CryptDecode( CRYPT_ARCH_ZIP, array, key, result );
   
    if ( d < 1 )
     {
       Print( GetLastError() );
     } 
   }
 
Mikalas:

Василий!

Вы не правильно делали, но и правильно тоже не работает:(

Правильно я делал. Файл не открывается потому что в директории COMMON должен находиться, мне так удобней.

Ключ key[] не обязан совпадать с размером источника.

sanyooooook:

может поможет

http://blog2k.ru/archives/3392

Я не могу вкладываться в разработку класса для чтения Zip, если не имею на руках документации и уверенности, что функция CryptDecode правильно разархивирует сжатый массив. Работа со структурой zip файла - тривиальная задача. Необходимо именно понять, почему упакованные данные штатного zip не совпадают с упаковкой CryptDecode(). Иными словами нужно точно понимать, почему желтые секции двух файлов не совпадают:

 

 

И попробуйте создать ZIP с помощью функции CryptEncode(),

возможно MQ используют свой метод шифрования похожий на ZIP 

 
Mikalas:

И попробуйте создать ZIP с помощью функции CryptEncode(),

возможно MQ используют свой метод шифрования похожий на ZIP 

ну он так и делает, а после сравнивает с тем что получается после штатного архиватора
 
C-4:

Я не могу вкладываться в разработку класса для чтения Zip, если не имею на руках документации и уверенности, что функция CryptDecode правильно разархивирует сжатый массив. Работа со структурой zip файла - тривиальная задача. Необходимо именно понять, почему упакованные данные штатного zip не совпадают с упаковкой CryptDecode(). Иными словами нужно точно понимать, почему желтые секции двух файлов не совпадают:

 

ожидать ответа от MQ наверное будет быстрее )