Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как получить x?


я_только_учусь ©   (2010-07-30 11:05:00) 

есть формула   a := ( (x * b) mod c ) xor d;

нам известны значения a, b, с и d - как исходя из этого создать формулу что бы узнавать значения  x?
например:

255 =  ( (x * 104084 ) mod 128079 ) xor 48413;

также я знаю что в данном случае x будет равен 31544. но значения могут меняться и нужно вывести формулу.

сразу хочу сказать что это не лабораторная работа или что то подобное.
просто встала задача по дешифровке некого блока данных, во всем остальном разобрался, а именно на этом :(


KilkennyCat   (2010-07-30 22:55:00) [1]


> И что генератором случайных чисел выбирать что л

дык можно тогда сразу им и воспользоваться.


я_только_учусь   (2010-07-30 16:41:00) [2]

задача создания валидной пары EncKey DecKey решена при помощи алгоритма Евклида. всем спасибо за помощь. тему можно закрывать.


RWolf   (2010-07-30 13:42:00) [3]


> есть формула   a := ( (x * b) mod c ) xor d;

вот представьте: a=1, b=1, c=2, d=0
т.е. 1 = x mod 2;
это равенство справедливо для любого нечётного x; какое выбирать будем?


Anatoly Podgoretsky   (2010-07-30 13:07:00) [4]

> И. Павел  (30.07.2010 12:15:10)  [10]

Да какой смысл, когда будет получено гигантское количество цифр, из которых
можно получить результат. И что генератором случайных чисел выбирать что ли.


я_только_учусь   (2010-07-30 12:58:00) [5]

b c d - константы. задачи из найти x, в ходе дискуссии превратилась в задачу
как найти валидную пару EncKey с DecKey.

мысль с перебором любопытная. примерный диапазон можно узнать
e = c mod (d xor a). диапазон от e*2 до e div 2.

спасибо. буду пробовать.


И. Павел   (2010-07-30 12:43:00) [6]

> Если b, c и d - константы

Ну т.е. я имею ввиду, что если это не предыдующие символы в коде.


И. Павел   (2010-07-30 12:42:00) [7]

Если b, c и d - константы, то можно составить таблицу - какой DecKey какому x предположительно соответствует. (т.е. [4])
А иначе - перебирайте DecKey. Этот алгоритм для этого и сделан, чтобы оказалось слишком много вариантов для расшифровки. Ну или ищите слабое место метода (если его название вам известно).


я_только_учусь   (2010-07-30 12:29:00) [8]

> И. Павел ©   (30.07.10 12:24) [12]
юмор оценён, но можно ли по теме? спасибо


И. Павел   (2010-07-30 12:24:00) [9]

> [11] я_только_учусь   (30.07.10 12:17)

Вас что, не снабдили всеми нужными инструкциями дешифровки в центре? Тогда глотайте капсулу с цианидом.


я_только_учусь   (2010-07-30 12:17:00) [10]

спасибо всем за ответы. я пришел в выводу что x это некий ключ дешифровки
переименуем x в DecKey. также я определил формулу шифрования данного блока и там присутствует некий ключ шифрования (как я понимаю), назовем его EncKey.в общем виде это теперь выглядит так:

Encrypt: (шифруется байт a)
b := ( (d xor a) * EncKey) mod c;

Decrypt:
a := ( (DecKey * b) mod c ) xor d;

осталось разобраться как можно найти валидную пару EncKey с DecKey. или возможно это модификация алгоритма шифрования RSA? как Вы считаете?


И. Павел   (2010-07-30 12:15:00) [11]

> Для указаной формулы это в первом приближение 2^64 для одного
> С

Может быть задача имеет физический смысл и у X есть своя ОДЗ и можно будет как-то сразу откинуть большую чась значений.


Anatoly Podgoretsky   (2010-07-30 12:06:00) [12]

> И. Павел  (30.07.2010 11:39:06)  [6]

Для указаной формулы это в первом приближение 2^64 для одного С


Sha   (2010-07-30 11:41:00) [13]

[4] - это общий ответ.

Чтобы разобраться в твоем случае,
для начала надо знать, как объявлены переменные.


И. Павел   (2010-07-30 11:40:00) [14]

> все эти варианты

В виде формулы. А так их бесконечно много.


И. Павел   (2010-07-30 11:39:00) [15]

Когда выполняется операция (x * b) mod c мы теряем информацию от целой части. Тоесть для разных x*b операция mod может дать одинаковый результат. Можно получить все эти варианты, а потом выбрать нужный по каким-то критериям.


я_только_учусь   (2010-07-30 11:34:00) [16]

то есть оставить всякую надежду? x невозможно определять? :(


Sha   (2010-07-30 11:32:00) [17]

Проще всего составить таблицу значений функции,
потом инвертировать ее.


Dennis I. Komarov   (2010-07-30 11:31:00) [18]


> я знаю что в данном случае x будет равен 31544

не только


Anatoly Podgoretsky   (2010-07-30 11:26:00) [19]

Удалено модератором


Palladin   (2010-07-30 11:16:00) [20]

для mod нет обратной операции


Наверх

Титульная страница Поиск, карта сайта Написать письмо