python hmac模块验证客户端的合法性

 更新时间:2020年11月07日 15:16:53   作者:手可摘星辰。  
这篇文章主要介绍了python hmac模块验证客户端的合法性,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下

hmac模块:

  比较两个函数的密钥是否一致:

import hmac
import os

msg = os.urandom(32)   #生成32位随机字节码

def wdc():
  key = b'wdc'  #密钥
  ret = hmac.new(key,msg)   #将字节码和key进行加密(必须都为bytes类型)创建一个对象ret
  digest = ret.digest()  #消化
  return digest  #返回消耗后的密文

def yhf():
  key1 = b'wdc'  #密钥
  ret1 = hmac.new(key1,msg)  #将字节码和key1进行加密(必须都为bytes类型)创建一个对象ret1
  digest1 = ret1.digest()   #消化
  return digest1 #返回消耗后的密文

wdc = wdc()
yhf = yhf()
result = hmac.compare_digest(wdc,yhf)  #比较两个密文是否一致,返回Fales/True
print(result)  #输出结果

验证客户端合法性:

  服务端:

import os
import hmac
import socket
secret_key = b'wdc'   #密钥:必须为二进制编码
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()

def check_conn(conn):
  msg = os.urandom(32)  #生成一个32位bytes类型随机码
  conn.send(msg) #发送一个32位的随机字节码
  h = hmac.new(secret_key,msg)   #将密钥和生成的随机字节码匹配加密生成一个对象
  digest = h.digest()   #消化生成密文
  client_digest = conn.recv(1024)   #接收消息(客户端生成的密文)
  return hmac.compare_digest(digest,client_digest)  #比较服务端和接收的客户端的密文是否一致

conn,addr = sk.accept()
res = check_conn(conn)
if res:
  print('合法的客户端')
  conn.close()
else:
  print('不合法的客户端')
  conn.close()

sk.close()

  客户端:

import hmac
import socket
secret_key = b'wdc'   #密钥:必须为二进制编码
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
msg = sk.recv(1024)   #接收信息(接收生成的32位字节码)
h = hmac.new(secret_key,msg)  #将密钥和生成的随机字节码匹配加密生成一个对象
digest = h.digest()   #消化生成密文
sk.send(digest)   #发送生成的密文

sk.close()

以上就是python hmac模块验证客户端的合法性的详细内容,更多关于python hmac模块的资料请关注脚本之家其它相关文章!

相关文章

  • 如何在Django中添加没有微秒的 DateTimeField 属性详解

    如何在Django中添加没有微秒的 DateTimeField 属性详解

    这篇文章主要给大家介绍了关于如何在Django中添加没有微秒的 DateTimeField 属性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 对python GUI实现完美进度条的示例详解

    对python GUI实现完美进度条的示例详解

    今天小编就为大家分享一篇对python GUI实现完美进度条的示例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python使用monkey.patch_all()解决协程阻塞问题

    Python使用monkey.patch_all()解决协程阻塞问题

    这篇文章主要介绍了Python使用monkey.patch_all()解决协程阻塞问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Python修改MP3文件的方法

    Python修改MP3文件的方法

    这篇文章主要介绍了Python修改MP3文件的方法,可实现删除MP3中图片文件的功能,需要的朋友可以参考下
    2015-06-06
  • Python time.time()方法

    Python time.time()方法

    这篇文章主要介绍了详解Python中time.time()方法的使用的教程,是Python入门学习中的基础知识,需要的朋友可以参考下,希望能给你带来帮助
    2021-08-08
  • Python使用一行代码获取上个月是几月

    Python使用一行代码获取上个月是几月

    本文介绍的关于Python时间日期处理,日期时间处理在实际应用场景中无处不在,所以这也成了编程语言中必不可少的模块,本文主要给大家介绍Python使用一行代码获取上个月是几月的相关知识,感兴趣的朋友一起看看吧
    2018-08-08
  • 把Anaconda中的环境导入到Pycharm里面的方法步骤

    把Anaconda中的环境导入到Pycharm里面的方法步骤

    这篇文章主要介绍了把Anaconda中的环境导入到Pycharm里面的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • python装饰器底层原理详解

    python装饰器底层原理详解

    这篇文章主要介绍了python装饰器底层原理讲解,被装饰对象加上装饰器,被装饰对象获得了更强大的功能,更多相关内容,需要的朋友可以参考一下
    2022-07-07
  • numpy中的nan和inf,及其批量判别、替换方式

    numpy中的nan和inf,及其批量判别、替换方式

    在Numpy中,NaN表示非数值,Inf表示无穷大,NaN与任何值计算都是NaN,Inf与0相乘是NaN,其余情况下与Inf运算仍为Inf,可以使用np.isnan(), np.isinf(), np.isneginf(), np.isposinf(), np.isfinite()等函数进行批量判别,返回布尔值数组
    2024-09-09
  • python关于字典及遍历的常用方法

    python关于字典及遍历的常用方法

    这篇文章主要介绍了python关于字典及遍历的常用方法,字典的键可以是字符串、整数、元组或字典。字典的值也可以是字符串、整数,文章围绕主题展开更多详细的内容,需要的小伙伴可以参考一下
    2022-06-06

最新评论