码迷,mamicode.com
首页 > 系统相关 > 详细

hmac检验客户端合法性

时间:2018-10-07 13:45:44      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:accept   hash   and   需要   随机   code   def   return   对象   

 

  1.服务端

# 验证客户端是否合法
# 不依靠登陆认证


# 当有一个客户端访问你的时候,建立了tcp后,server端主动发起一个数据,数据为想加密的bytes类型的数据。
    # 客户端拿到要加密的bytes类型的数据,

# import hmac     # 该模块与hashlib类似
# import os
#
# h = hmac.new()  # secret_key 需要一个密钥,与想要加密的bytes类型数据
# content = h.digest()  # 拿到一个密文内容
# hmac.compare_digest()   # 比较 ,密文与另外一个密文
#
# print(os.urandom(32))   # 随机生成32个字节

import socket
import hmac     # 该模块与hashlib类似
import os

def check_conn(conn):
    random_msg = os.urandom(32) # 得到一个随机的32个字节
    conn.send(random_msg)   # 随机发送32个字节
    h = hmac.new(secret_key, random_msg)    # 使用密钥secret_key对发送出去的32个随机字节进行加密得到一个hmac对象
    digest = h.digest()     # 由hmac对象得到一个密文
    client_digest = conn.recv(1024)
    return hmac.compare_digest(digest, client_digest)  # 比较自己对32个字节加密后得到的密文,与客户端得到32个字节后加密得到的密文是否一样


secret_key = begg  # 密钥
sk = socket.socket()

sk.bind((127.0.0.1, 8090))

sk.listen()

conn, addr = sk.accept()

res = check_conn(conn)
if res:
    print(合法的客户端)
    conn.send(bOK)
else:
    print(不合法的客户端)
    conn.send(bNO)

conn.close()
sk.close()

  

  客户端

import socket
import hmac


secret_key = begg

sk = socket.socket()

sk.connect((127.0.0.1, 8090))

msg = sk.recv(1024)     # 得到的是的32个随机字节

h = hmac.new(secret_key, msg)   # 根据与服务端协商好的secret_key,对收到的32个随机字节进行加密,得到一个hmac对象

digest = h.digest() # 由hmac对象得到了32随机字节与secret_key加密后的密文内容

sk.send(digest) # 将密文内容发送到服务端

print(sk.recv(1024).decode(utf-8))

sk.close()

 

hmac检验客户端合法性

标签:accept   hash   and   需要   随机   code   def   return   对象   

原文地址:https://www.cnblogs.com/whylinux/p/9749883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!