RSA 암호화 구현 with 파이썬

2022. 11. 6. 22:52코딩

반응형
import base64
import math
from Crypto.Util.number import getPrime

def gcd(p, q):
    x = math.gcd(p,q)
    return x

def lcm(p, q):
    l = math.lcm(p,q)
    return l

def pubkey_e(l):
    e = 2
    while e < l and gcd(e,l) != 1:
        e += 1
    return e

def pubkey_n(p,q):
    n = p * q
    print("public key n : " + str(n))
    return n

def prikey_d(e,l):
    d = 1
    while (e*d) % l != 1 or d == e:
        d += 1
    return d

def rsa_enc(e,n,m):
    C = (int(m)**e)%n
    enc_message_ascii = str(C).encode('ascii')
    enc_message_ascii_to_b64 = (base64.b64encode(enc_message_ascii)).decode('utf-8')
    print("rsa 암호화문 :" + str(enc_message_ascii_to_b64))
    return C

def rsa_dec(C,d,n):
    dec_message = (int(C)**d)%n
    #render_decode = int.to_bytes(dec_message,len(str(dec_message)),'big')
    print(dec_message)
    #render_decode_message = render_decode.decode('utf-8')
    #print("rsa 복호화문 :" + str(render_decode_message))
    #return render_decode_message

def main():
    p = 11
    q = 3
    n = pubkey_n(p,q)
    l = lcm(p-1,q-1) 
    print("secret value : " + str(l))
    e = pubkey_e(l)
    print("public key e : " +str(e))
    d = prikey_d(e,l)
    print("private key d : " + str(d))
    m = input("평문 입력 :")
    C = rsa_enc(e,n,m)
    print(C)
    rsa_dec(C,d,n)

if __name__ == "__main__":
    main()
반응형

'코딩' 카테고리의 다른 글

스택프레임 시각화 - ( StackFrame visualization)  (0) 2023.01.15
file in file  (0) 2022.11.26
코드업 C언어 100제 클리어  (2) 2022.09.15
개발 완료 ( To do List )  (0) 2022.07.25
개발 계획 ( To do List )  (0) 2022.07.19