python网络编程----使用socket实现加密(经典移位加密)传输

阅读: 评论:0

python⽹络编程----使⽤socket实现加密(经典移位加密)传输python⽹络编程
初识Socket
Socket(⼜称套接字)起源于Unix,是应⽤层与TCP/IP协议族通信的中间软件抽象层。复杂的TCP/IP协议族隐藏在了Socket接⼝内部,⽤户只需要简单地使⽤Socket接⼝来进⾏⽹络编程。应⽤程序通常是通过Socket向⽹络发出请求或者应答⽹络请求,使主机间或者⼀台计算机上的进程间可以通讯。
创建Socket
在Python中,我们⽤ socket()函数来创建套接字,语法格式如下:
socket(family,type[,protocol])
参数解释:
family:socket家族描述
socket.AF_UNIX只能够⽤于单⼀的Unix系统进程间通信
socket.AF_INET指定使⽤IPv4协议进⾏服务器间⽹络通信
socket.AF_INET6指定使⽤IPv6协议进⾏服务器间⽹络通信
protocol:socket协议描述
⼀般不填且默认为0系统会根据地址格式和套接字类别,⾃动选择⼀个合适的协议。
socket.IPPROTO_IP ip协议
socket.IPPROTO_ICMP icmp协议
Socket常⽤⽅法
服务器端⽅法描述
socket.bind(address)绑定地址(host,port)到套接字, 在AF_INET下,以元组(host,port)的形式表⽰地址。
socket.listen(backlog)开始监听TCP传⼊连接。backlog指定在拒绝连接之前,操作系统可以挂起的最⼤连接数量。该值⾄少为1,⼤部分应⽤程序设为
5就可以了。
socket.accept()被动接受TCP客户端连接并返回(sock,address),其中sock是新的套接字对象,可以⽤来接收和发送数据,address是连接客户
端的地址。
客户端⽅法描述
公共⽅法描述
接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最⼤数据量。flag提供有关消息的其他信
息,通常可以忽略。
socket.send(string[,flag])发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能⼩于string的
字节⼤⼩。
socket.sendall(string[,flag])完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回
None,失败则抛出异常。
串,address是发送数据的套接字地址。
socket.sendto(string[,flag],address)发送UDP数据。将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发
送的字节数。
socket.close()关闭套接字。
公共⽅法描述
⼀个⼩应⽤
搭建服务器端和客户端实现加密(经典移位密码)传输信息
服务器端:
from socket import*
from time import ctime
host ='127.0.0.1'
port =1919
buffer=1024
addr =(host, port)
ser = socket(AF_INET, SOCK_STREAM)#创建流式套接字
ser.bind(addr)#套接字绑定地址
ser.listen(5)
def key(data):
s = data
listS =list(s[:])#将输⼊字符串转换为列表
newList =[]
n =8
for i in listS:#循环移位加密
if i.isalpha():#检测字符串是否只由字母组成
if(97+n)<=ord(i)<=122or(65+n)<=ord(i)<=90:
newList.append(chr(ord(i)- n))#chr()函数将ascii码转化为字符串
else:
newList.append(chr(ord(i)+(26-n)))
else:
newList.append(i)
newS ="".join(newList)#将列表转换为字符串
return newS
while True:
print('waiting ')
cli,addr = ser.accept()
print('.....connected from : ', addr)
while True:
data = v(buffer).decode()#接收数据并解码为字符串print('密⽂ >', data)
data = key(data)
print('明⽂ >',data)
if data =='exit':
break
cli.send(('[%s] %s'%(ctime(), data)).encode())
cli.close()
ser.close()
#cli.send('%s %s' % (ctime(), data))
客户端:
from socket import*
host ='127.0.0.1'
port =1919
buffer=1024
addr =(host, port)
cli = socket(AF_INET, SOCK_STREAM)
def crypto(data):
s = data
listS =list(s[:])#将输⼊字符串转换为列表
newList =[]
n=8
#循环移位解密
for i in listS:
if i.isalpha():#检测字符串是否只由字母组成
if97<=ord(i)<=(122-n)or65<=ord(i)<=(90-n):#ord()函数将字符转化为asiic码                newList.append(chr(ord(i)+ n))
else:
newList.append(chr(ord(i)-(26-n)))
else:
newList.append(i)
newS ="".join(newList)#将列表转换为字符串
return newS
while True:
data =de('> '))#encode()函数将字符串编码为字节流
if data =='exit':
break
data = crypto(data)
cli.de(data))
data = v(buffer).decode()#decode()函数将字节流解码为字符串
print(data)
cli.close()#关闭套接字
客户端:
服务器端:

本文发布于:2023-05-07 11:53:33,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/90812.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:接字   字符串   数据   连接   返回   指定   地址   加密
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图