eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: gurololicon (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› не хватает логики понять простенький алгоритм. может кто подскажет.
Посл.ответ Сообщение

Ранг: 42.1 (посетитель)
Статус: Участник

Создано: 13 апреля 2018 23:27 · Поправил: carver New!
Цитата · Личное сообщение · #1

вот, попытался обобщить, скриптом:

Code:
  1. $in=0x12345678;
  2. $out=1;
  3. for($i=0;$i<8;$i++){
  4.   $out=($out**2)%0xE01E9C71;
  5.   if($i%2==1) {
  6.     $out=($out*$in)%0xE01E9C71;
  7.   }
  8. }


на вxоде: 0x12345678
на выxоде: 0x65985210

что-то не могу сообразить,
как мне развернуть алгоритм,
что-бы с 0x65985210 получить входные 0x12345678 ?

заранее благодарен.

Ранг: 382.5 (мудрец)
Статус: Участник

Создано: 14 апреля 2018 00:43 · Поправил: dosprog New!
Цитата · Личное сообщение · #2

Не получить никак. Операция "%" это остаток от деления.

| Сообщение посчитали полезным: carver


Ранг: 42.1 (посетитель)
Статус: Участник

Создано: 14 апреля 2018 09:15 New!
Цитата · Личное сообщение · #3

х.м. у меня на выходе этой операции, выходит текст,
только числа поболее, и итераций на порядок больше.

разве что я в примере указал что %A5A5A5A5,
но похоже у меня простое число.
rsatools ему моментально находит prime и d.

можно ли развернуть алгоритм, если делить на 0xE01E9C71 ?

Ранг: 49.2 (посетитель)
Статус: Участник

Создано: 14 апреля 2018 09:22 · Поправил: kunix New!
Цитата · Личное сообщение · #4

carver, там точно if($i%2==1)?
Ибо вообще это похоже на вычисление $in^$d (mod 0xE01E9C71) по алгоритму быстрого возведение в степень.
Тогда вместо $i должен быть $i-ый старший бит числа $d.

dosprog, ну почему же...
Это херня вычисляет $in^85 (mod 0xE01E9C71).
Задача обратить это все, то есть вычислить корень, и она вполне решаема.
0xE01E9C71 = 3760102513 = 49307 * 76259.
У нас тут говно-RSA, короче.
Делать нефиг решать.

M = 3760102513;
P = 49307;
Q = 76259;
F = (P - 1)*(Q - 1);
expPub = 85;
expPriv = PowerMod[expPub, -1, F]; // = 3229156673

Короче,
$out = $in^85 (mod 0xE01E9C71)
$in = $out^3229156673 (mod 0xE01E9C71)

Но если не получилось факторизовать 0xE01E9C71, то тут сразу все радикально усложняется.

| Сообщение посчитали полезным: carver


Ранг: 42.1 (посетитель)
Статус: Участник

Создано: 14 апреля 2018 09:46 · Поправил: carver New!
Цитата · Личное сообщение · #5

kunix да, благодарю еще раз за догадку моего кривого обобщения алгоритма.
заменил все свои изыскания на
$x->bmodpow($e,$m); # modular exponentiation (($x ** $y) % $mod)
$x->bmodpow($d,$n);
$d - очень короткий, в rsa tool за пару сек считается.
все декодирует, туда и обратно.


Ранг: 218.9 (наставник)
Статус: Участник
dotnet

Создано: 18 апреля 2018 10:51 New!
Цитата · Личное сообщение · #6

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


Ранг: 265.0 (наставник)
Статус: Участник

Создано: 18 апреля 2018 22:21 New!
Цитата · Личное сообщение · #7

По нормальному вопрос формулируется в понятном виде. Что это значит:

> if($i%2==1) {
> $out=($out*$in)%0xE01E9C71;

- нужно гадать. Это не алгоритм и логики никакой нет, это мусор.
 eXeL@B —› Вопросы новичков —› не хватает логики понять простенький алгоритм. может кто подскажет.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS