Сейчас на форуме: Lohmaty, tyns777, cppasm (+7 невидимых)

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

Ранг: 46.1 (посетитель), 1thx
Активность: 0.02=0.02
Статус: Участник

Создано: 13 апреля 2018 23:27 · Поправил: carver
· Личное сообщение · #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 ?

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



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

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

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

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

Ранг: 46.1 (посетитель), 1thx
Активность: 0.02=0.02
Статус: Участник

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

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

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

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



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 14 апреля 2018 09:22 · Поправил: kunix
· Личное сообщение · #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

Ранг: 46.1 (посетитель), 1thx
Активность: 0.02=0.02
Статус: Участник

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

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




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

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

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

-----
have a nice day





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

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

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

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

- нужно гадать. Это не алгоритм и логики никакой нет, это мусор.

-----
vx



 eXeL@B —› Вопросы новичков —› не хватает логики понять простенький алгоритм. может кто подскажет.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати