python联网控制发送数据_Python – Pycrypto – 通过网络发送加密数据

我试图让2个程序使用公钥通过网络共享加密数据,但我遇到了一个困难的问题:共享的信息(密钥和/或加密数据)似乎被修改.我希望尽可能简单地保持加密数据格式和密钥格式,以便与其他语言兼容.

为了解决这个问题,我创建了两个程序:Keyreceive和Keysend.

它们按此顺序执行:

> Keyreceive启动并等待接收加密数据

> Keysend启动并生成RSA密钥,将导出的私钥保存到文件中

> Keysend对一段数据进行加密,并通过网络将其发送给Keyreceive

> Keyreceive从同一文件导入私钥,并使用它来解密加密数据

> Keysend还解密加密数据以验证结果

Keysend.py

import socket

import os

from Crypto.PublicKey import RSA

from Crypto import Random

rng = Random.new().read

RSAkey = RSA.generate(1024, rng)

privatekey = RSAkey

publickey = RSAkey.publickey()

print(privatekey.exportKey()) #export under the 'PEM' format (I think)

print(publickey.exportKey())

file = open("Keys.txt", "w")

file.write(privatekey.exportKey()) #save exported private key

file.close()

data = "hello world"

enc_data = publickey.encrypt(data, 16) #encrypt message with public key

print(str(enc_data))

host = "localhost"

port = 12800

connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

connexion.connect((host, port))

connexion.send(str(enc_data)) # send encrypted data, this appears to be the source of the problem

dec_data = RSAkey.decrypt(enc_data) # test decryption

print(dec_data)

os.system("pause")

Keyreceive.py

import socket

import os

from Crypto.PublicKey import RSA

from Crypto import Random

host = ''

port = 12800

connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

connexion.bind((host, port))

connexion.listen(5)

clientconnexion, connexioninfo = connexion.accept()

enc_data = clientconnexion.recv(1024) # receive encrypted data

print(enc_data)

file = open("Keys.txt", "r")

privatestr = file.read() # retrieve exported private key from file

file.close()

print(privatestr)

privatekey = RSA.importKey(privatestr) # import private key

data = privatekey.decrypt(enc_data) # decrypt sent encrypted data

print(data)

os.system("pause")

在两个文件完成解密加密数据后,Keysender输出原始消息:“hello world”,而Keyreceiver输出乱码.

如果加密数据和密钥格式中存在“隐藏”信息,是否有某种方式以“纯”文本格式编写它们?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值