我遇到了问题。我正在使用pycrypto和rsa。 我想生成我的rsa密钥。 然后我想发送我的公钥(二进制或base64或类似)但首先我想用server public加密它。因为我想确保没有人在嗅闻,我的公众需要不为人所知。
然后问题就开始了。因为当我加密我的公钥时,在解密之后,解密的数据是不可读的。
我不知道为什么。当我交换公众并发送正常数据(不是公钥)加密工作。我找不到如何发送我的公共加密的解决方法。
有人能帮助我吗?每条评论都很有用
我的代码:
random_generator = Random.new().read
self.private_key = RSA.generate(1024, random_generator)
self.public_key = self.private_key.publickey()
keytoexport =self.public_key.exportKey(format='PEM', passphrase=None)
#client encrypting to server
def _encrypt(self, content):
return self.server_public_key.encrypt(content, 32)
#server decrypting content
def _decrypt(self, content):
return self.parent.private_key.decrypt(content)
我这样通过客户端发送数据报。
def send_datagram(self, datagram):
datagram = pickle.dumps(datagram)
self.socket.sendall(datagram)
response_server = self.socket.recv(2048)
return pickle.loads(response_server)
然后将其重新发送到服务器。
receive_socket = self.request
ask = receive_socket.recv(2048).strip()
答案 0 :(得分:1)
根据定义,密钥对的公钥长于模数,因为包含模数。模数将为128字节,因为它定义了RSA的密钥大小。因此,根据定义,您无法使用相同大小的密钥加密RSA密钥。
所以你可以做的事情:
如果您选择实施此方案,则需要考虑对RSA加密和AES进行填充oracle攻击。因此,使用OAEP / AES-GCM或OAEP / AES-CBC / HMAC作为加密方案,或者您也可以在此处发布您的公钥。