Theory/Cipher protocol

RSA공개키를 이용한 암호화 구현

D4tai1 2019. 5. 30.

1. RSA공개키를 이용한 암호화

(1) RSA공개키 암호 알고리즘

▶ 예전에 정리한 내용이 있어서 아래 URL을 통해 확인이 가능하다.

▶ 참고 : https://ccurity.tistory.com/88

 

(2) RSA의 특징

 [1] 개인키를 알면 공개키를 구할 수 있다.

 [2] 그러나 공개키를 안다고해서 개인키를 구할 수는 없다.

 [3] 소스

from Crypto.PublicKey import RSA  def main():     msg = b'hellow!'     print(msg)      private_key = RSA.generate(1024)     # 개인키를 하나 만듬     print('private_key : {}'.format(private_key))      public_key = private_key.publickey()     # private_key를 알면 public_key를 구할 수 있음     print('public_key : {}'.format(public_key))      cipher_msg = public_key.encrypt(msg, 32)      print('cipher_msg : {}'.format(cipher_msg))     # ctrl + p = 자동완성              plain_msg = private_key.decrypt(cipher_msg)     print('plain_msg : {}'.format(plain_msg))  if __name__ == '__main__':     main() 

 

 [4] 시연

 

 

(3) RSA의 공개키와 개인키 추출

 [1] 소스

from Crypto.PublicKey import RSA  def main():     private_key = RSA.generate(1024)     public_key = private_key.publickey()      # print('1. private_key : {}'.format(private_key.exportKey('PEM')))     # 키의 객체를 문자열로 변경      with open('private_key.pem', 'w', encoding='utf-8') as fd:          fd.write(private_key.exportKey('PEM').decode())     # private_key.pem 파일을 쓰기모드로 열고 키의 객체(문자열)를 저장          fd = open('public_key.pem', 'wb+')     fd.write(public_key.exportKey('PEM'))     fd.close()     # public_key.pem 파일을 쓰기모드로 열고 키의 객체를 문자열로 저장      # with open으로 열 때는 'w'모드로 열었고 그러면 byte는 쓸 수 없고 str만 쓰기가능     # open으로 열 때는 'wb+'모드로 열었고 그러면 str과 byte 모두 쓰기가능     # 그래서 with open은 byte를 str로 바꾸는 decode()를 추가로 사용  if __name__ == '__main__':     main() 

 

 [2] 시연

 

 

(4) RSA의 공개키와 개인키를 읽어오기

 [1] 소스

from Crypto.PublicKey import RSA  def main():     msg = b'I love you'     print(msg)      fin = open('public_key.pem', 'rb')     public_key = RSA.importKey(fin.read())     fin.close()     # 공개키를 파일에서 읽어오기      cipher_msg = public_key.encrypt(msg, 32)      print(cipher_msg)     # 평문을 공개키로 암호화      fin = open('private_key.pem', 'rb')     private_key = RSA.importKey(fin.read())     # 개인키를 파일에서 읽어오기      plain_msg = private_key.decrypt(cipher_msg)     print(plain_msg)     # 개인키로 암호문을 복호화  if __name__ == '__main__':     main() 

 

 [2] 시연

 

 

 

댓글