Сейчас на форуме: _MBK_, tyns777, UniSoft (+11 невидимых)

 eXeL@B —› Программирование —› Возможно ли обратить, или получить удовлетворяющий ответ?
Посл.ответ Сообщение


Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 16 июня 2012 08:17 · Поправил: ZaZa
· Личное сообщение · #1

Доброго времени суток!

Есть такой вот алгоритм:
Code:
  1.         
  2. BigInteger num = new BigInteger(key, 0x10);
  3. BigInteger exp = new BigInteger("10001", 0x10);
  4. BigInteger n = new BigInteger("75B677A38DE2ED08D6EA9C7DE3D4CC61", 0x10);
  5. byte[] bytes = num.modPow(exp, n).getBytes(); Выполняет модульное деление числа, возведенного в степень другого числа.

Вот именно модульное деление числа с возведением в степень и надо обратить... То есть получить NUM.
На входе массив из 16 байт, причем все байты, кроме последних четырех могут быть произвольными...

Примерный массив с маской на вход:
byte[] bytes = {0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x42 0x35 0x42 0x57}
А на выходе (после того, как обратили) нужно получить число (BigInteger).

В дебри математики вдаваться не сильно охото... Может кто знает элегантный путь? Возможно ли это вообще?

-----
One death is a tragedy, one million is a statistic.





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 16 июня 2012 08:18
· Личное сообщение · #2

ZaZa
RSA

-----
Research For Food


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


Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 16 июня 2012 08:26 · Поправил: ZaZa
· Личное сообщение · #3

daFix
Очень похоже...
И что мне теперь с этим делать? Я просто в RSA вообще ни ногой... Я так понимаю надо подбирать ключи простые числа?

Чтобы получить NUM нужно вычислить по такой формуле: bytes^(exp^-1 mod ((p-1)(q-1))) mod (p*q) = NUM
Остается подобрать p и q, чтобы оно при умножении было равно N...
Правильно я думаю?

-----
One death is a tragedy, one million is a statistic.




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

Создано: 16 июня 2012 09:08
· Личное сообщение · #4

ZaZa 75B677A38DE2ED08D6EA9C7DE3D4CC61 точно такое короткое? если да то можно сбрутить, если хочешь очень красиво

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 16 июня 2012 09:11 · Поправил: ZaZa
· Личное сообщение · #5

VodoleY
Да, именно такое... А чем брутить? Есть какое то решение или самому писать?
Так кажется, что это MD5 хэш... Может есть у кого Rainbow таблички... ))

С помощью RSATool вычислил P и Q от N(0x75B677A38DE2ED08D6EA9C7DE3D4CC61):
P = 0x9E759F476CE594CB
Q = 0xBE2BE4DEFF986A03
Чаво дальше делать то? Не понимаю...

-----
One death is a tragedy, one million is a statistic.




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 16 июня 2012 09:31 · Поправил: SReg
· Личное сообщение · #6

ZaZa пишет:
Чаво дальше делать то? Не понимаю...

посчитать D
вообще в гугле инфы хоть жри. http://z0mbie.host.sk/rsa.html


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


Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 16 июня 2012 09:50
· Личное сообщение · #7

SReg
Сенкс... я уже посчитал... пытаюсь декрипт сделать...
За информацию еще раз сенкс, будем курить...

-----
One death is a tragedy, one million is a statistic.





Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 16 июня 2012 10:09 · Поправил: ZaZa
· Личное сообщение · #8

Все получилось... Всем спасибо!
Кому интересно (никому не интересно) :

Code:
  1. byte[] bytes = {0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x42 0x35 0x42 0x57}
  2. BigInteger num_temp = new BigInteger(bytes)
  3. BigInteger exp = new BigInteger("10001", 0x10);
  4. BigInteger d = new BigInteger("597623D719AEAD965149DC461D5CCB41", 0x10);
  5. BigInteger n = new BigInteger("75B677A38DE2ED08D6EA9C7DE3D4CC61", 0x10);
  6. BigInteger num = num_temp.modPow(d, n)


-----
One death is a tragedy, one million is a statistic.



 eXeL@B —› Программирование —› Возможно ли обратить, или получить удовлетворяющий ответ?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати