Der TCP -Socket -Server hängt zufällig und der RSA -Entschlüsselungsfehler wird zufällig angehobenPython

Python-Programme
Anonymous
 Der TCP -Socket -Server hängt zufällig und der RSA -Entschlüsselungsfehler wird zufällig angehoben

Post by Anonymous »

Ich versuche, einen Server für einen Passwort -Manager zu erstellen, den ich erstelle, aber der Server scheint zufällig zu hängen und es scheint zufällig auch rsA.pkcs1.deklyptionErors nach dem Zufallsprinzip zu werfen. Ich habe kürzlich vom Senden einer Endnachricht an den Server gewechselt, der dann den Server nicht mehr erwartet hat, um Dinge zu erwarten, zu einem Testskript. Vielleicht wirft das einen Schraubenschlüssel in die Dinge. Aber das tat dies noch bevor ich wechselte. Im Moment wirft es die meiste Zeit, dass es eine Passform macht, um das Passwort zu dekodieren. Hier ist der Servercode: < /p>
import json

import rsa
import socket
import os.path
import netifaces
import json_repair

def get_connection_data():
if os.path.exists("data/data.json"):
connection_data = tuple(json_repair.from_file("data/data.json"))

else:
interface = netifaces.interfaces()[int(input(f"Enter the index of the interface you want to use. Eg, to use {netifaces.interfaces()[0]} enter 1\n{netifaces.interfaces()}\n")) - 1]
port = input("What port do you want to user? Press enter for the default \n")

if port == "":
port = 9000

connection_data = (
netifaces.ifaddresses(interface)[netifaces.AF_INET][0]["addr"],
port
)

if not os.path.exists("data"):
os.mkdir("data")

with open("data/data.json", mode="w") as connection_file:
json.dump(connection_data, connection_file, indent=4)

return connection_data

def register_user(user_client, device_address: float):
print("register_user called")

# Make sure data path exists
if not os.path.exists("data"):
os.mkdir("data")

if not os.path.exists(f"data/{device_address}"):
os.mkdir(f"data/{device_address}")

all_passwords = {}

# receive all passwords
while True:
service = rsa.decrypt(user_client.recv(1024), priv_key=private_key).decode()

print("Service is:" + service)

while service != "END":
user_client.send("READY".encode())

username = rsa.decrypt(user_client.recv(1024), priv_key=private_key).decode()

print("Username is: " + username)

user_client.send("READY".encode())

print("Sent ready after receiving username")

password = rsa.decrypt(user_client.recv(1024), priv_key=private_key).decode()
print(password)
user_client.send("READY".encode())

print("Sent ready after receiving password")

key = rsa.decrypt(user_client.recv(1024), priv_key=private_key)
user_client.send("READY".encode())

print("Sent ready after receiving key")

if user_client.fileno() == -1:
break

if user_client.fileno() == -1:
break

all_passwords[service] = {
username: {
"password": password,
"key": key.decode()
}
}

with open(f"data/{device_address}/.passwords.json", mode="w") as passwords_file:
json.dump(all_passwords, passwords_file, indent=4)

public_key, private_key = rsa.newkeys(1024)
client_public_key = None

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(get_connection_data())
server.listen()

print(f"Listening on {get_connection_data()[0]}:{get_connection_data()[1]}")

while True:
client, ip_address = server.accept()

print("Connection accepted")

client.send(public_key.save_pkcs1("PEM"))
client_public_key = rsa.PublicKey.load_pkcs1(client.recv(1024))

print("Received and sent Public keys")

action = client.recv(1024)# .decode("utf-8")
# print("Received Action")

# print(action)

client.send("READY".encode())
print("Sent ready message")

if action.decode().lower() == "register user":
print("Inside if statement")
register_user(user_client=client, device_address=ip_address[0])
< /code>
Und hier ist das Testskript, das ich zusammengestellt habe: < /p>
import socket
import time

import rsa

IP_ADDRESS = input("Enter server IP: ")
PORT = 9000

pub_key, priv_key = rsa.newkeys(1024)
server_pub_key = None

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print("Connecting to server")

server.connect((IP_ADDRESS, PORT))

print("Receiving server public key and sending public key")

server_pub_key = rsa.PublicKey.load_pkcs1(server.recv(1024))
server.send(pub_key.save_pkcs1("PEM"))

message = "register user"

server.send(message.encode("utf-8"))
print("Sent action")

time.sleep(1)

print("Waiting for ready message")
server.recv(1024)
print("Received ready message")

all_passwords = {
"service": {
"username": {
"password": "password",
"key": "key"
},
"username2": {
"password": "password2",
"key": "key2",
}
},

"service2": {
"username": {
"password": "password",
"key": "key"
},

"username2": {
"password": "password2",
"key": "key2",
}
}
}

for service in all_passwords:
service_data = all_passwords[service]

service = service

print("Sending service")

server.send(rsa.encrypt(service.encode(), pub_key=server_pub_key))
server.recv(1024)

for username in service_data.keys():
username = username
password = service_data[username]["password"]
key = service_data[username]["key"]

print(f"Service: {service} \nUsername: {username} \nPassword: {password} \nKey: {key}")

server.send(rsa.encrypt(username.encode(), pub_key=server_pub_key))
server.recv(1024)

print("Received ready after sending username")

server.send(rsa.encrypt(password.encode(), pub_key=server_pub_key))
server.recv(1024)

print("Received ready after sending password")

server.send(rsa.encrypt(key.encode(), pub_key=server_pub_key))
server.recv(1024)

print("received ready after sending key")

server.close()
< /code>
Wenn jemand bessere Möglichkeiten dafür weiß, lassen Sie mich bitte < /p>
Ich habe inzwischen die öffentlichen und privaten Schlüssel überprüft und habe inzwischen versucht, durch meinen Code eine Linie zu gehen, aber nichts fiel mir auf. Ich habe auch einige kurze Suchanfragen auf Brave durchgeführt, einen Thread gefunden, in dem dies in CPython geschah, klickte darauf und ging sofort zurück, weil er direkt über meinen Kopf ging. Außerdem wurde mir aufgefallen, wenn ich das dekodierte Passwort mit diesem Code ausdrucken: < /p>
print(rsa.decrypt(user_client.recv(1024), priv_key=private_key).decode())
return
< /code>
Es wird ohne Probleme ausgeführt und das Passwort ordnungsgemäß entschlüsselt. Die meiste Zeit. Hin und wieder gibt es mir auch eine Passform zum Entschlüsseln des Passworts
Bearbeiten: Ich habe auch versucht, eine Endnachricht aus dem Testskript zu senden und dann den Server die Verbindung zu schließen, aber das hat nichts geändert

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post