#coding=utf_8
from Crypto.Cipher import AES
from Crypto.Random import random
import socket
def padding(message):
paddingLength = 16 - len(message) % 16
paddingByte = chr(paddingLength)
message = message + paddingByte * paddingLength
return message
def depadding(message):
if(len(message) % 16 != 0):
raise Exception("Error: length of the message should be multiple of 16!")
paddingLength = ord(message[-1])
message = message[ : -paddingLength]
return message
def genKey():
key = ""
for i in range(16):
byte = random.randint(0, 255)
key = key + chr(byte)
return key
def connect2Server():
host = "localhost"
port = 11111
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host, port))
#生成并发送密钥key和初始化向量iv
key = genKey()
iv = genKey()
aes = AES.new(key, AES.MODE_CBC, iv)
message = "key:" + key + ";iv:" + iv
print "明文发送key和iv", message
s.send(message)
# 收到确认消息后,验证是否是ok
message = s.recv(1024).strip()
message = aes.decrypt(message)
message = depadding(message)
print message
if message != "ok":
print("会话确认错误!断开连接!")
s.close()
return123
print "确认开始会话"
while True:
print "请输入消息..."
message = raw_input().strip()
message = padding(message)
message = aes.encrypt(message)
s.send(message)
print "等待对方消息..."
message = s.recv(1024)
message = aes.decrypt(message)
message = depadding(message)
print(message)
s.close()
if __name__ == "__main__":
'''
加密通信协议:
1.A方client随机生成AES加密密钥key和初始化向量iv
2.以明文发送key和iv,报文格式:"key:xxxxxxxxxxxxxxxx;iv:xxxxxxxxxxxxxxxx"
3.B方server收到并解析key和iv,以AES/CBC加密"ok"发送给A方
4.A方收到消息解密验证是否是ok,如果是开始会话,否则断开链接
:return:
'''
connect2Server()
没有合适的资源?快使用搜索试试~ 我知道了~
python实现简单的加密通信
共2个文件
py:2个
需积分: 49 47 下载量 89 浏览量
2018-07-09
08:25:17
上传
评论 7
收藏 2KB RAR 举报
温馨提示
python实现的简单加密通信,采用pycrypto加密模块实现
资源推荐
资源详情
资源评论
收起资源包目录
半双工.rar (2个子文件)
半双工
server.py 2KB
client.py 2KB
共 2 条
- 1
资源评论
拾柒▪清歡
- 粉丝: 2
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功