我已经编写了一个套接字服务器。服务器端是Java,客户端是Python。服务器使用TCP通信,由于TCP不安全,我使用非对称加密。服务器有一个私有公钥对,每次客户端连接时,它都会发送公钥并请求客户端公钥
为了通过TCP发送PublicKey
对象,我使用此函数将其转换为字符串
public String publicKeyToString(PublicKey publicKey){
byte[] pKBytes = publicKey.getEncoded(); // Get the public key to bytes
return Base64.getEncoder().encodeToString(pKBytes); // Convert the public key to String
}
另一方面,要从字符串创建PublicKey
对象,我使用此函数
public PublicKey publicKeyFromString(String key) throws NoSuchAlgorithmException, InvalidKeySpecException {
byte[] keyBytes = Base64.getDecoder().decode(key);
KeyFactory kf = KeyFactory.getInstance("RSA");
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
return kf.generatePublic(spec);
}
上面的代码在java客户机上运行得非常好。现在我想用python做同样的事情。我用这段代码创建私有公钥
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
client_private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
client_public_key = client_private_key.public_key()
现在的问题是,我不知道如何从公钥中提取字符串,以便将其发送到服务器。此外,字符串键将从public String publicKeyToString(PublicKey publicKey)
解码,因此应使用base64对其进行编码
“规格”:
如果您有一个更好的python库,我愿意接受建议,java是有点固定的,因为到目前为止,已经编写了很多代码
目前没有回答
相关问题 更多 >
编程相关推荐