ImportError: Нет модуля с именем DS ?? Python Pickles Sockets Использование - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь перевести объект с открытым ключом в форму pickle из client.py, затем передать его через поток сокетов, а затем снова открыть его обратно в server.py.

Я получаю ImportError: Нет модуля с именем DS на стороне сервера, когда я пытаюсь открыть поток через publicKey = pickle.loads (команда [4]). Вот полная ошибка:

(iCrypto.PublicKey.DSA
Traceback (most recent call last):
  File "server.py", line 148, in <module>
    main()
  File "server.py", line 56, in main
    publicKey = pickle.loads(command[4])
  File "/usr/lib/python2.7/pickle.py", line 1388, in loads
    return Unpickler(file).load()
  File "/usr/lib/python2.7/pickle.py", line 864, in load
    dispatch[key](self)
  File "/usr/lib/python2.7/pickle.py", line 1075, in load_inst
    klass = self.find_class(module, name)
  File "/usr/lib/python2.7/pickle.py", line 1130, in find_class
    __import__(module)
ImportError: No module named DS

Ключевой объект это:

    import Crypto.PublicKey.RSA as RSA
import Crypto.PublicKey.DSA as DSA
import Crypto.Util.number as CUN
from Crypto.Cipher import PKCS1_OAEP
import os

# Generates a new set of keys for the session
def GeneratesKeys():
          return RSA.generate(1024, os.urandom)

И вот фактический код:

server.py

 data = s.recv(1024)
 if data:
      command = data.split()

  if command[0] == "message":
    print command[1] + " & " + command[2] +  " have been invited!"

    alg = command[3]

    print "test"
    print command[4]

    import pickle
    publicKey = pickle.loads(command[4])
    print publicKey

       # Encrypt symmetric key w/ user's public key
       pvtPubKeys.EncryptMessages(symmetricKey, publicKey, alg)

client.py

     import pickle
        pubKey = pickle.dumps(account.publicKey)
        print account.publicKey
        # Invited user sends other info to server
         s.sendall("message" + " " + myUsername + " " + theirUsername + " " + choice + " " + pubKey)

Можете ли вы помочь мне здесь? Спасибо.

1 Ответ

1 голос
/ 22 мая 2019

Я пытаюсь перевести объект с открытым ключом в форму рассылки из client.py, затем передать его через поток сокетов, а затем снова открыть его обратно в server.py.

Не делайте этого.

pickle небезопасно для клиент-серверных приложений. Злонамеренный клиент может выполнить произвольный код Python на вашем сервере, отправив специально созданную строку рассылки.

Если вам нужно передать ключ по сети, экспортируйте ключв стандартном формате, таком как DER или PEM :

# in client
private_key = RSA.generate(1024)
public_key = private_key.publickey()
exported_public_key = public_key.exportKey(format='DER')

# in server
public_key = RSA.importKey(exported_public_key)

(взято из этот ответ )

...