我有一个列表,其中包含一个公钥和一个我想通过套接字发送的用户名。
我找到了 how to send an array over a socket in python但使用酸洗也无效。我的代码:
private_key = generateRSA()
public_key = private_key.public_key()
host = ''
port = 8000
username = sys.argv[1]
mySocket = socket.socket()
mySocket.connect((host, port))
dataToSend = [public_key, username.encode()]
dataSend = pickle.dumps(dataToSend)
mySocket.send(dataSend)
控制台中的错误说
dataSend = pickle.dumps(dataToSend)
_pickle.PicklingError: Can't pickle <class '_cffi_backend.CDataGCP'>: attribute lookup CDataGCP on _cffi_backend failed
密钥是使用cryptography
library生成的。
答案 0 :(得分:0)
您正在尝试发送Visual Studio 2015,但这是由SSL管理的数据结构,而不是Python。因为你通过CFFI代理与它进行交互,所以你不能腌制其中一个。
您需要选择RSAPublicKey
instance来发送它。您可以转换为PEM,例如:
from cryptography.hazmat.primitives import serialization
pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
上面会将您的密钥导出为字符串值,然后您可以将其转换为字节并直接通过套接字发送。另一方将再次从该字符串key serialization format。
请注意,上述内容使用无加密。拦截该套接字上的流量的任何人都可以读取您的公钥。这对您的申请可能有问题,也可能不是。