Помогите определить алгоритм компрессии

Тема в разделе "WASM.CRYPTO", создана пользователем Oxy, 12 май 2010.

  1. Oxy

    Oxy New Member

    Публикаций:
    0
    OpenText: 12345678 (ASCII)
    Compressed: 78 DA 33 34 32 36 31 35 33 B7 00 00 07 40 01 A5
     
  2. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
     
  3. Oxy

    Oxy New Member

    Публикаций:
    0
    Спасибо.
    А существует ли dll-ка, способная скушать это В ТАКОМ ВИДЕ?
     
  4. Oxy

    Oxy New Member

    Публикаций:
    0
    Пробую скормить эти данные Zlib...
    Но для этого требуется разобраться со структурой блока. Если я правильно понял, то:
    78 DA -- сигнатура, указывающая способ компрессии;
    33 34 32 36 31 35 33 B7 00 00 -- собственно сжатые данные;
    07 40 01 A5 -- CRC32 (правда, не пойму от чего?)
     
  5. reverser

    reverser New Member

    Публикаций:
    0
    Код (Text):
    1. Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
    2. Type "help", "copyright", "credits" or "license" for more information.
    3. >>> a = "78 DA 33 34 32 36 31 35 33 B7 00 00 07 40 01 A5"
    4. >>> a = a.replace(" ","")
    5. >>> a
    6. '78DA33343236313533B70000074001A5'
    7. >>> b = a.decode('hex')
    8. >>> b
    9. 'x\xda3426153\xb7\x00\x00\x07@\x01\xa5'
    10. >>> import zlib
    11. >>> c = zlib.decompress(b)
    12. >>> c
    13. '12345678'
    14. >>>
     
  6. Oxy

    Oxy New Member

    Публикаций:
    0
    reverser
    Ой! Я даже не понял, по-какому ж енто написано :)

    Ну и ладно: зато Zlib.uncompress скушал мой пример на ура :)

    Но теперь вопрос: как организовать БЛОЧНУЮ распаковку? Ибо реальный материал за один присест не взять--уж больно он увесистый...
     
  7. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Ск0чай полную версию zlib с офицального сайта, прочитай документацию. Там есть итерационный поточный алгоритм (собственно говоря он есть основной =)

    Код (Text):
    1. ;; для трудных блоксхема
    2. if ( InflateInit(трололо) ) {
    3.   do {
    4.     int result = InflateData(трололо);
    5.   } while (result == Z_OK);
    6. }
    7. InflateEnd(трололо);
    8. if ( result == Z_STREAM_END )
    9.   return(заебца!);
    10. else return(факап-однако);
     
  8. Oxy

    Oxy New Member

    Публикаций:
    0
    Dr.Golova
    Спасибо, помогло! :)