Python:ValueError:以10为底的int()的无效文字:'\ x00

时间:2019-03-19 17:43:48

标签: python-3.x client-server diffie-hellman

我正在制作一个实现Diffie-Hellman算法的客户端服务器程序

客户:

from __future__ import print_function
import math
import socket

host = "localhost"
port = 1200
s = socket.socket(socket.AF_INET,   socket.SOCK_STREAM)
s.connect((host, port))

print("Connected with Server")

sharedPrime = 23    # p
sharedBase = 5      # g

aliceSecret = 6     # a

s.send(bytes(aliceSecret))
bobSecret=s.recv(1024)

# Alice Sends Bob A = g^a mod p
A = (sharedBase**aliceSecret) % sharedPrime

s.send(bytes(A))
B=s.recv(1024)

B=B.decode()
# Alice Computes Shared Secret: s = B^a mod p
aliceSharedSecret = (int(B)** aliceSecret) % sharedPrime
print( "Alice Shared Secret: ", aliceSharedSecret )

服务器代码基本上相同,除了它处理算法的“鲍勃”一方。我的问题开始于这一行:

aliceSharedSecret = (int(B)** aliceSecret) % sharedPrime

哪个给我这个错误:

invalid literal for int() with base 10: '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

我回过头来看看“ B”实际上是什么,它只是空白。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

看这行:

someUnion.array[i]

您在此处将*(someUnion.array+i)的值转换为s.send(bytes(aliceSecret)) 。这样会产生类似int的结果,即使解码后也无法将其直接转换为bytes,因为它不是十进制形式的数字。有两种可能的解决方案:

1)正确解码值,此行会将b'\x00\x00\x00\x00\x00\x00'对象解释为int,并分成字节:

bytes

2)在转换为int之前将原始的B = int.from_bytes(B, byteorder='big', signed=False) # instead of B = B.decode() 值转换为int,这样反向转换就可以了