#如果客户端知道服务端的ip地址和端口,就可以连接服务端,信息不安全。
#使用os.urandam随机生成32位bytes,然后hmac加密之后再发送给客户端。
#server:
import socket
import hmac
import os
secret_key = b'daxiong'
sk = socket.socket()
sk.bind(('127.0.0.1',9002))
sk.listen()
conn,addr =sk.accept() def compare(conn):
msg = os.urandom(32) #随机32位bytes,每次都不一样。
conn.send(msg) #把它当做验证码发出去
h = hmac.new(secret_key,msg) #加密secret_key和验证码,得到加密的对象
digest = h.digest() #得到密文
client_digest = conn.recv(1024) #接收client的密文
return hmac.compare_digest(digest,client_digest) #对比密文和client的密文,并返回给compare(conn)
ret = compare(conn) if ret:
print('合法的客户端')
else:
print('非法客户端') conn.close()
sk.close() #client:
import socket
import hmac
sk = socket.socket()
sk.connect(('127.0.0.1',9002)) secret_key = b'daxiong' #这个密钥是约定好的。
msg = sk.recv(1024) #接收32位的bytes
h = hmac.new(secret_key,msg) #加密,得到h对象。
digest = h.digest() #密文
sk.send(digest) sk.close()

最新文章

  1. HTML BOM Browser对象
  2. SIMLock锁卡功能解析
  3. Windows7 IE10运行不了JavaScript的问题
  4. PAT 解题报告 1047. Student List for Course (25)
  5. flume监控之ganglia
  6. 如何让旧版IE浏览器认识HTML5元素
  7. silverlight imagesource赋值与转换
  8. BZOJ2565: 最长双回文串(回文树)
  9. EntityFramework默认映射规则
  10. mysql(mariadb)如何更改root密码
  11. numpy(五)
  12. 01.Java 开发简单的计算器
  13. Python: 猴子分桃。海滩上有一堆桃子,五只猴子来分。
  14. Ubuntu去掉命令行前用户名和主机名方法
  15. python json5
  16. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
  17. Xcode一个project生成多个App
  18. STIL文件(DFT/IC测试方向)
  19. 光线求交-面、三角形、球 (Ray intersection)
  20. redis 安装及安装遇到的问题解决

热门文章

  1. webUploader多个实例
  2. faster RCNN(keras版本)代码讲解(3)-训练流程详情
  3. For循环的几个练习
  4. h5-transform二维变换
  5. BIOS与UEFI
  6. 82.常用的返回QuerySet对象的方法使用详解:all,select_related
  7. HDU 3484 Matrix Game 枚举暴力
  8. 题解 P1019 【单词接龙】
  9. 201703-1 分蛋糕 Java
  10. 不会美工的前端不是好UE