On-line: PSP, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 06.07.06 02:57. Заголовок: Сжатые числа


Помогите плс разобраться.
Есть PRG-модуль позволяющий сжимать числа. Что под этим понимается я не знаю, возможно сжатие в двоично-десятичные числа, используемые в ассемблере, но судя по беглому осмотру кода, что-то большее.
С клиппером никогда не имел дело, поэтому используемые в коде функции не всегда понятны, а разбираться времени нет. : (

Мне нужно знать что делает этот алгоритм, т.е. каким образом он пакует, чтоб написать аналогичное на другом языке.
Ниже кусочек кода файла, может кому покажется знакомым - могу выслать весь файл. Средств отладки у меня нет.



STATIC aTabl1 := { 29, 7, 15, 14, 23 } // 3 - 5_1 O5_1
STATIC aTabl2 := { 5, 21, 12, 30, 26 } // 16 - 5_2 O5_2
STATIC aTabl3 := { 8, 24, 17, 13 } // 10 - 4_1 O4_1
STATIC aTabl4 := { 4, 11, 9, 22 } // 25 - 4_2 O4_2
STATIC aTabl5 := { 20, 1, 18, 27 } // 19 - 4_3 O4_3
STATIC aTabl6 := { 2, 6, 28 } // 19 - 3_1 O3_1
STATIC aTabl7 := { 23, 21, 13, 9, 6 }
STATIC aTabl8 := { 7, 12, 11, 22, 28 }
STATIC aTabl9 := { 29, 30, 24, 1 }
STATIC aTabl10 := { 15, 14, 20, 2 }
STATIC aTabl11 := { 5, 26, 8, 17 }
STATIC aTabl12 := { 4, 18, 27 }
STATIC aTabl01 := { 1, 2, 4, 5, 7 }
STATIC aTabl02 := { 3, 6, 8, 10 }

// упаковка полей C 5
FUNCTION PackC5( Data )
MEMVAR pnKey
LOCAL nRandVal, nKey := 0, nSavData
IF pnKey = 3487595928158456
IF Data < 0 .OR. Data > 16777215 .OR. Data = 2105376
Data := 0
ENDIF
nKey := RANDOM()%65535+1
nSavData := Data
ChBits( @nKey, @Data, 3 )
IF nKey = 8224 .OR. nKey = 0
nKey := 0
Data := nSavData
ELSE
nRandVal := INT(RAND(nKey*(34*nKey+845)+196)*1000000)
Data := NUMXOR( Data, nRandVal )
ENDIF
ENDIF
RETURN SUBSTR(L2BIN(Data),1,3)+I2BIN(nKey)


Спасибо: 0 
Ответов - 5 [только новые]


Администратор




Пост N: 233
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.07.06 09:24. Заголовок: Re:


Random - это генератор псевдослучайных чисел
Так что вряд ли получится воспроизвести это преобразование на другом языке один к одному

Спасибо: 0 
Профиль



Пост N: 1
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.07.06 15:51. Заголовок: Re:


А как выглядит UnpackC5() ?
Кто глатает резултат функции ?


Спасибо: 0 
Профиль



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 07.07.06 04:05. Заголовок: Re:


Pasha я тоже так думаю : (

fredi
Там тоже генератор случайных чисел.

FUNCTION UnPackC5( Data )
MEMVAR pnKey
LOCAL nRandVal, nKey
IF pnKey = 3487595928158456
nKey := BIN2W(SUBSTR(Data,4,2))
Data := BIN2L(SUBSTR(Data,1,3)+CHR(0))
IF nKey = 8224 .OR. nKey = 0
RETURN IIF(Data=2105376,0,Data)
ELSE
nRandVal := INT(RAND(nKey*(34*nKey+845) + 196)*1000000)
Data := NUMXOR( Data, nRandVal )
ChBits( @nKey, @Data, 3 )
ENDIF
ENDIF
RETURN Data


Спасибо: 0 



Пост N: 2
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 07.07.06 13:28. Заголовок: Re:


Может быть есть там код ChBits()

Спасибо: 0 
Профиль





Пост N: 1
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 08.07.06 11:17. Заголовок: Re:


Мне кажется, что это не упаковщик, а функции шифровки-дешифровки.
Об этом говорит NUMXOR с ключом - после этой операции длина выражения не меняется.
Кроме этого, похоже, что PackC5 и UnPackC5 будут работать только при условии, что nKey равен некоему, заранее установленному значению... Похоже на TimeBomb

Спасибо: 0 
Профиль
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 55
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет