p = 43
q = 53
e = 1241
n = p*q
phi = (p-1)*(q-1)
# Took from SO
def egcd(a, b):
if a == 0:
return (b, 0, 1)
g, y, x = egcd(b%a,a)
return (g, x - (b//a) * y, y)
def modinv(a, m):
g, x, y = egcd(a, m)
if g != 1:
raise Exception('No modular inverse')
return x%m
d = modinv(e, phi)
print('【例1】(素数P,素数Q,公開鍵E)=(61,53,17)なら、秘密鍵D=2753')
print('【例2】(素数P,素数Q,公開鍵E)=(43,53,1241)なら、秘密鍵D=1649')
print('素数P =', p)
print('素数Q =', q)
print('公開鍵N(P*Q) =', n)
print('オイラー関数Phi =', phi)
print('公開鍵E =', e)
print('秘密鍵D =', d)
|