无法通过套接字发送RSA密钥

时间:2016-09-04 21:20:43

标签: python sockets python-3.x pickle

我有一个列表,其中包含一个公钥和一个我想通过套接字发送的用户名。

我找到了 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生成的。

1 个答案:

答案 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

请注意,上述内容使用无加密。拦截该套接字上的流量的任何人都可以读取您的公钥。这对您的申请可能有问题,也可能不是。

相关问题