简体   繁体   English

使用python和RSA算法的加密聊天应用程序

[英]Encrypted chat app using python and RSA algorithm

I am trying to create an encrypted chat application using RSA algo in python but I am getting error messages. 我正在尝试使用python中的RSA算法创建加密的聊天应用程序,但我收到错误消息。 I am unable to find the errors in the code and the chat system is not working at all. 我无法在代码中找到错误,聊天系统根本无法正常工作。 The client.py is terminating with showing this error client.py正在终止显示此错误

File "client.py", line 17, in 文件“client.py”,第17行,in

           server_string = server.recv(1024)

           OSError: [Errno 107] Transport endpoint is not connected

The codes are: 代码是:

the server.py is: server.py是:

import socket
from Crypto.PublicKey import RSA
from Crypto import Random

#Generate private and public keys
random_generator = Random.new().read
private_key = RSA.generate(1024, random_generator)
public_key = private_key.publickey()

#Declartion
mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname(socket.getfqdn())
port = 8888
encrypt_str = "encrypted_message="

if host == "127.0.1.1":
    import commands
    host = commands.getoutput("hostname -I")
print("host = " + host)

#Prevent socket.error: [Errno 98] Address already in use
mysocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

mysocket.bind((host, port))

mysocket.listen(5)

c, addr = mysocket._accept()

while True:

    #Wait until data is received.
    data = c.recv(1024)
    data = data.replace("\r\n", '') #remove new line character

    if data == "Client: OK":
        c.send("public_key=" + public_key.exportKey() + "\n")
        print("Public key sent to client.")

    elif encrypt_str in data: #Reveive encrypted message and decrypt it.
        data = data.replace(encrypt_str, '')
        print("Received:\nEncrypted message = "+str(data))
        encrypted = eval(data)
        decrypted = private_key.decrypt(encrypted)
        c.send("Server: OK")
        print("Decrypted message = " + decrypted)

    elif data == "Quit": break

#Server to stop
c.send("Server stopped\n")
print("Server stopped")
c.close()

The client.py is client.py是

import socket
from Crypto.PublicKey import RSA
import sys 
import os 

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 7777

server.bind(("my_IP_addr_goes_here", 8880))
#data= "Client: OK"

#Tell server that connection is OK
#server.sendall("Client : OK")

#Receive public key string from server
server_string = server.recv(1024)

#Remove extra characters
server_string = server_string.replace("public_key=", '')
server_string = server_string.replace("\r\n", '')

#Convert string to key
server_public_key = RSA.importKey(server_string)

#Encrypt message and send to server
message = "This is my secret message."
encrypted = server_public_key.encrypt(message, 32)
server.sendall("encrypted_message="+str(encrypted))

#Server's response
server_response = server.recv(1024)
server_response = server_response.replace("\r\n", '')
if server_response == "Server: OK":
    print("Server decrypted message successfully")

#Tell server to finish connection
server.sendall("Quit")
print(server.recv(1024)) #Quit server response
server.close()

The errors are: The server script is running but when I am terminating the script it's showing 错误是:服务器脚本正在运行,但是当我终止它正在显示的脚本时

For server.py: ^CTraceback (most recent call last): 对于server.py:^ CTraceback(最近一次调用最后一次):

           File "server.py", line 28, in <module>

           c, addr = mysocket._accept()

           KeyboardInterrupt

For client.py: File "client.py", line 17, in 对于client.py:文件“client.py”,第17行,in

           server_string = server.recv(1024)

           OSError: [Errno 107] Transport endpoint is not connected

You want to capture SIGINT... See How do I capture SIGINT in Python? 您想捕获SIGINT ...请参阅如何在Python中捕获SIGINT?

import signal
import sys
def stop_server(sig, frame):
        server.sendall("Quit")
        print(server.recv(1024)) #Quit server response
        server.close()
        sys.exit(0)
signal.signal(signal.SIGINT, stop_server)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 python中RSA算法使用公钥解密 - Decryption using public key in RSA algorithm in python 使用Python解密的使用Java RSA加密的字符串包含额外的加密字符 - String that was RSA encrypted using Java contains extra encrypted characters when decrypted using Python 导出使用python-rsa加密的消息 - Export message that encrypted with python-rsa 无法解码加密的 rsa 消息 python3 - Cannot decode encrypted rsa message python3 什么python包为rsa算法 - what python package for rsa algorithm 无法解密使用 rsa 方法加密的消息 - It is not possible to decrypt a message encrypted using the rsa method Python代码,使用私有指数和模数以64位的块解密RSA加密文件 - Python code that decrypts RSA encrypted file in chunks of 64 bit using a private exponent and modulus 使用 bouncycastle 在 C# 中使用 cryptodome 解密在 python 中加密的 RSA 数据会导致错误块不正确 - Decrypting RSA data encrypted in python with cryptodome in C# using bouncycastle gives error block incorrect 如何使用 Python 解密使用 PEM RSA 私钥加密的 Windows EC2 实例密码? - How to decrypt Windows EC2 instance password that was encrypted with a PEM RSA private key using Python? 将python RSA加密算法翻译成JS - Translating python RSA encryption algorithm to JS
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM