2014-11-26 3 views
6
def gcd(e, z): 

    if z == 0: 
     return e 
    else: 
     return gcd(z, e % z) 

e = int(input("Please enter the first number:")) 
z = int(input("Please enter the second number:")) 

print ("The GCD of ",e," and ",z," is ",gcd(e,z)) 
d = 1 
while d < e: 

    if d * e == 1 % z: 
     print (d," * ",e," = 1 (mod ",z,")") 
     d = d + 1 
    else: 
     d = d + 1 

Я пытаюсь использовать этот код, чтобы найти кандидатов на RSA с помощью грубой силы, кажется, как она должна работать, но он не может кто-нибудь помочь мне?Python НОД calulation ОГА

г = (р - 1) (Q - 1) для вычисления г используется до этого с р = 47 и д = 59, е = 17 и D = 157, но после того, как программа работает его не находит совпадений, но должен.

+1

'1% z' всегда' 1' ... что вы ожидали, что это будет означать? – khelwood

+0

Я ожидал, что de = 1 (mod z) – user3636668

+4

Тогда вы хотите '(d * e)% z == 1' – khelwood

ответ

3

Где у вас есть

if d * e == 1 % z: 

вы, кажется, хотят, чтобы проверить "ли d*e равны (по модулю z) к 1"

Но что вы делаете, выполняя 1 % z (что дает 1) и проверки, если d * e равна 1.

Изменить его:

if (d*e) % z == 1: 

и он должен сделать расчет вы собираетесь.

0

некоторые проблемы из кода:

1) если г = (р-1) (Q-1), д * е = 1 (по модулю г), то г и д взаимно просты, НОД (е , г) всегда равна 1, see

2), если вы говорите, d * е = 1 (по модулю г), код должен быть if d * e % z == 1

+0

Ваш (3) не требуется. Если вы передадите их в неправильном порядке, то 'e% z' будет' e', как вы говорите, но это просто означает, что 'return gcd (z, e% z)' является таким же, как 'return gcd (z , e). Другими словами, он автоматически меняет их для вас. – abarnert

+0

вот что я имел в виду, он никогда не получит наибольшего общего делителя @ abarnert – ChesterL

+0

Тогда вы имели в виду не так. Если вы вызываете 'gcd (e, z)', когда вы должны называть 'gcd (z, e)', это нормально, потому что первое, что он сделает, это 'return gcd (z, e)'. Попробуйте запустить его; 'gcd (4, 18)' и 'gcd (18, 4)' оба возвращают '2'. – abarnert

Смежные вопросы