1. from crypto.PublicKey import RSA  
  2.   
  3. def rsa_encrypt(msg):  
  4.     private_key = RSA.generate(1024)  
  5.     public_key = private_key.publickey()  
  6.     encdata = public_key.encrypt(msg, 32)  
  7.   
  8.     print encdata  
  9.   
  10.     decdata = private_key.decrypt(encdata)  
  11.     print decdata  
  12.   
  13. if __name__ == '__main__':  
  14.     msg = "very very lovely python"  
  15.     rsa_encrypt(msg)  
  16.     rsa_decrypt(msg)  


[ 코드 1 ] RSA 공개키 암호 



[ 코드 1 ]을 실행하면 다음과 같은 결과가 화면에 출력된다.




공개키로 암호화 한 결과는 튜플로 리턴되며 튜플의 첫번째 멤버가 암호 결과이다. 암호 결과는 128byte이다.


그런데 위의 코드는 실용적이지 못하다. 

프로그램이 종료되면 생성한 개인키와 공개키가 사라져 버리기 때문이다.

공개키는 잃어버려도 개인키만 있으면 공개키를 다시 부활시킬 수 있으니 개인 키만 잘 저장하면 된다.


가장 간단한 방법은 개인키를 파일로 저장하는 것이다.


[ RSA 개인키 파일 생성 ]


  1. from Crypto.PublicKey import RSA  
  2.   
  3. def createPEM():  
  4.     private_key = RSA.generate(1024)  
  5.     f = open('mykey.pem''wb+')  
  6.     f.write(private_key.exportKey('PEM'))  
  7.     f.close()  
  8.   
  9. if __name__ == '__main__':  
  10.     createPEM()  

[ 코드 2 ] RSA 개인키 파일 만들기


[ 코드 2 ] 는 128byte 개인키를 생성하고 'mykey.pem' 이라는 파일에 

개인키를 암호화된 정보로 저장하는 코드이다.


  1. from Crypto.PublicKey import RSA  
  2.   
  3. def createPEM():  
  4.     private_key = RSA.generate(1024)  
  5.     f = open('mykey.pem''wb+')  
  6.     f.write(private_key.exportKey('PEM'))  
  7.     f.close()  
  8.   
  9. def readPEM():  
  10.     h = open('mykey.pem''r')  
  11.     key = RSA.importKey(h.read())  
  12.     h.close()  
  13.     return key  
  14.   
  15. def rsa_enc(msg):  
  16.     private_key = readPEM()  
  17.     Public_key = private_key.publickey()  
  18.     encdata = Public_key.encrypt(msg, 32)  
  19.   
  20.     return encdata  
  21.   
  22. def rsa_dec(msg):  
  23.     private_key = readPEM()  
  24.     decdata = private_key.decrypt(msg)  
  25.     return decdata  
  26.   
  27. if __name__ == '__main__':  
  28.     msg = 'very very lovely python'  
  29.       
  30.     ciphered = rsa_enc(smg.encode('utf-8'))  
  31.     print ciphered  
  32.       
  33.     deciphered = rsa_dec(ciphered)  
  34.     print deciphered  

[ 코드 3 ] 개인키 파일을 이용한 RSA 공개키 암호 - rsa.py

'Crypto > pycrypto' 카테고리의 다른 글

3DES, AES 파일 암호화, 복호화 - pycrypto  (0) 2017.02.04
3. ARC4 - pycrypto  (0) 2017.02.03
2. AES - pycrypto  (0) 2017.02.02
1. 3DES - pycrypto  (0) 2017.02.02

+ Recent posts