2016-09-11 5 views
0

내 보낸 공개 키를 사용하여 암호화 된 메시지의 암호를 해독하도록 요청한이 문제에 직면했습니다. 나는 3 개 개의 파일로 제공하고있다 :PyCrypto로 내 보낸 RSA 공개 키를 사용하여 메시지를 해독하는 방법은 무엇입니까?

  1. 암호화 파이썬 스크립트
  2. 암호화 된 메시지
  3. 보낸 공개 내가 공개 키를 가져온 다음 해독하지만 난 생각하려고

키 메시지를 암호 해독하기 위해 개인 키를 알아 내야합니다.

암호화 코드는 다음과 같습니다 256 키가 아주 작고 쉽게 인수 분해 할 수있는 의견에서 지적

import gmpy 
from Crypto.Util.number import * 
from Crypto.PublicKey import RSA 
from Crypto.Cipher import PKCS1_v1_5 

message = open('message', 'r').read() * 30 

def ext_rsa_encrypt(p, q, e, msg): 
    m = bytes_to_long(msg) 
    while True: 
     n = p * q 
     try: 
      phi = (p - 1)*(q - 1) 
      d = gmpy.invert(e, phi) 
      pubkey = RSA.construct((long(n), long(e))) 
      key = PKCS1_v1_5.new(pubkey) 
      enc = key.encrypt(msg).encode('base64') 
      return enc 
     except: 
      p = gmpy.next_prime(p**2 + q**2) 
      q = gmpy.next_prime(2*p*q) 
      e = gmpy.next_prime(e**2) 

p = getPrime(128) 
q = getPrime(128) 
n = p*q 
e = getPrime(64) 
pubkey = RSA.construct((long(n), long(e))) 
f = open('pubkey.pem', 'w') 
f.write(pubkey.exportKey()) 
g = open('msg.enc', 'w') 
g.write(ext_rsa_encrypt(p, q, e, message)) 
+0

256 비트 키 (sic!)는 아주 작습니다. 모듈러스를 (일반) 숫자 필드 체 구현을 사용하여 계수 할 수 있습니다. –

+0

@ArtjomB. 고맙습니다. 이제 개인 키를 만들었지 만 "key = PKCS1_v1_5.new (개인 키); key.decrypt (encmsg.decode ('base64'))"를 사용하여 메시지를 해독 할 수 있습니까? PKCS1_v1_5에는 전리품이 필요합니다. 해독을 위해 전리품을 어떻게 알 수 있습니까? – RAHAB2

+0

감시 암호는 암호 해독 오류가 발생한 경우에 대비하여 반환하는 개체입니다. 당신은 감시 카메라가 무엇인지 결정합니다. '-1'은 센티넬이 될 수 있습니다. ''닭고기''는 감시병이 될 수 있습니다. 당신은 아이디어를 얻습니다. –

답변

0

으로. 먼저 키 생성에 사용 된 소수를 재구성해야합니다. OpenSSL을 가진 쉬운 라이너 계수 및 지수입니다 찾기 :

$ openssl rsa -in <your-public-key> -pubin -text -modulus 

Exponent: <decimal-value> (<hex-value>) 
Modulus=<hex-value> 

같은 출력 뭔가 이제 msieve와 계수를 인수 분해하거나 https://factordb.com/ 데이터베이스 내에서 검색 할 수 있습니다. 이것은 당신에게 당신의 "p"와 "q"를 줄 것입니다. 암호화 코드가 매우 RSA하지 않기 때문에 당신은 다음과 같아야 자신의 해독 기능을 작성해야 :

이제
def ext_rsa_decrypt(p, q, e, msg): 
    m = bytes_to_long(msg) 
    while True: 
     n = p * q 
     try: 
      phi = (p - 1)*(q - 1) 
      d = gmpy.invert(e, phi) 
      privkey = RSA.construct((long(n), long(e), long(d))) 
      key = PKCS1_v1_5.new(privkey) 
      enc = key.decrypt(msg, "a") 
      return enc 
     except Exception, ex: 
      traceback.print_exc() 
      p = gmpy.next_prime(p**2 + q**2) 
      q = gmpy.next_prime(2*p*q) 
      e = gmpy.next_prime(e**2) 

당신은 단지 base64로하는 것을 잊지 마세요, 당신이 메시지를 해독하는 데 필요한 모든 것을해야한다 암호화 된 메시지를 해독 기능에 전달하기 전에 암호화 된 메시지를 해독합니다.