首页 > 解决方案 > 任务 Python 套接字和哈希库

问题描述

我有一个练习,但我有一个问题要从客户端发送 {message, SHA256}。我无法将这两条消息分别从客户端发送到服务器。

练习是:

通过套接字创建简单的客户端-服务器通信,客户端将以以下形式发送消息 → { message,SHA_256_hash_value}。一旦服务器接收到消息,它将对其进行解析,计算消息部分的 SHA_256 哈希值,并将其与接收到的哈希值进行比较。如果值匹配,它将向客户端发送“OK”,否则“消息已泄露”。


从评论中挽救的尝试:

import socket
import hashlib
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1235))
print("ingrese mensaje")
mensaje = input()
while True:
  mensaje_utf = str.encode(mensaje)
  hash_object = hashlib.sha256(mensaje_utf)
  hex_dig = hash_object.hexdigest()
  s.send(mensaje_utf)
  s.send(str.encode(hex_dig))
  datos = s.recv(1024).decode()
  print(datos)
  mensaje = input()
  s.close()

这是server.py

import socket
import hashlib

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 1235))
s.listen(5)

conn, address = s.accept()

print("Conexion desde: " + str(address))

while True:
   datos = conn.recv(1024).decode()
   if not datos:
       break
   print(datos)
   conn.send (datos.encode())
   conn.close() 
 

现在的问题是如何将消息与:{message, SHA256} 分开

标签: pythonsocketshash

解决方案


您可能能够以所需的形式发送数据,替换如下发送调用:

import socket
import hashlib 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1235))
print("ingrese mensaje") 

mensaje = input() 

while True: 
    mensaje_utf = str.encode(mensaje)
    hash_object = hashlib.sha256(mensaje_utf) 
    hex_dig = hash_object.hexdigest()

    message_to_send = "{" + mensaje + "," + hex_dig + "}"
    s.send(str.encode(message_to_send)) 

    datos = s.recv(1024).decode() 
    print(datos) 
    mensaje = input() 
    s.close()

推荐阅读