RSA 암호화, 복호화 파이썬

RSA 암호화, 복호화 파이썬

안녕하세요.

오늘은 RSA 암호화, 복호화에 대한 내용으로 파이썬을 사용할 겁니다.

RSA에 대한 자세한 내용은 다른 글을 참고하세요.

  • RSA암호화.
  • RSA암호 복호화.

RSA 암호화.

일단 암호화를 해보겠습니다.

공개키e=65537

flag = 'RSA암호화된 내용.'

N = 4611686039902224373
e = 65537
for char in flag:
    print(pow(ord(char), e, N))
#    print(ord(char))

실행 결과.

위의 숫자는 암호화된 내용, 아래 숫자는 아스키코드 값.

이 내용을 나중에 복호화해보세요.

더보기

N=3600000003960000001073

e=65537

아래는 암호화된 내용입니다.

1357410430570196362673
558763914466895990483
2684509447747563860330
1710905786365774609162
953840471653008354905
1541549802937318494200
3003706932516293952165
1201828181063236003002
1710905786365774609162
896709995168184026750
2011483999694616039175
3102153032120261650768
2409779644952345381690
1710905786365774609162
181080586775778875896
957675428720389859917
3203660735526076158025
388265928902158753554
1710905786365774609162
3295218315521549465322
2249141528303849692835
3254913270098152971627
3185239740443786099697
2675258135789169382259
2458914897497077435292

RSA암호 복호화.

먼저 위에서 개인키를 언급하지 않았으니 개인키를 구해보겠습니다.

두 개의 큰 소수 p, q를 찾습니다. (N=p*q)

대충 이렇게 소인수분해해주면 찾을 수 있습니다.

2147483647 * 2147483659

ko.numberempire.com/numberfactorizer.php

 

숫자 소인수분해.

숫자 소인수분해.

ko.numberempire.com

이제 phi, d를 구해줍니다.

phi=(p-1)*(q-1)입니다.

d=divm(1,e,phi)

아래 코드로 구했습니다.

*제 컴퓨터에서 안 돌아가서 이 코드는 라즈베리파이 환경에서 실행했습니다.

#pip install gmpy2
from gmpy2 import *
p=2147483647
q=2147483659
e=65537
N=4611686039902224373
phi=(p-1)*(q-1)
d=divm(1,e,phi)

f=pow(1980623571453356734,d,N)
print("c={}".format(f))

위의 코드로 d값을 구하고 rsa로 암호화된 내용을 하나 가져와서 해독해서 맞는지 대충 확인해봤습니다.

위에서 아스키 값으로 82가 나왔는데 맞게 나왔져?

구한 d값을 아래 코드에 넣어줍니다.

N = 4611686039902224373
d=1610434511968928777

c=[2693562083745057396,
3464930162706426157,
2199865028473114338,
3646666488815926804,
3554285231245759181,
3955657706292175738,
1676676505457949331,
4176583175592744821,
4052807046352490708,
1183455982591427086,
2788271498363605114
]
for char in c:
    f=pow(char,d,N)

    print("{}".format(chr(f)),end='') 

구한 d값으로 이렇게 rsa로 암호화된 내용을 복호화 할 수 있습니다.

Designed by JB FACTORY