- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Python实实现现简简单单的的客客户户端端认认证证
主要介绍了Python如何实现简单的客户端认证,文中讲解非常细致,代码帮助大更好的理解和学习,感兴趣
的朋友可以了解下
问问题题
你想在分布式系统中实现一个简单的客户端连接认证功能,又不想像SSL那样的复杂。
解解决决方方案案
可以利用hmac模块实现一个连接握手,从而实现一个简单而高效的认证过程。下面是代码示例:
importhmac
importos
defclient_authenticate(connection,secret_key):
Authenticateclienttoaremoteservice.
connectionrepresentsanetorkconnection.
secret_keyisakeyknononlytobothclient/server.
message=connection.recv(32)
hash=hmac.ne(secret_key,message)
digest=hash.digest()
connection.send(digest)
defserver_authenticate(connection,secret_key):
Requestclientauthentication.
message=os.urandom(32)
connection.send(message)
hash=hmac.ne(secret_key,message)
digest=hash.digest()
response=connection.recv(len(digest))
returnpare_digest(digest,response)
基本原理是当连接建立后,服务器给客户端发送一个随机的字节消息(这里例子中使用了os.urandom()返回值)。客户端和
服务器同时利用hmac和一个只有双方知道的密钥来计算出一个加密哈希值。然后客户端将它计算出的摘要发送给服务器,服
务器通过比较这个值和自己计算的是否一致来决定接受或拒绝连接。摘要的比较需要使用pare_digest()函数。使
用这个函数可以避免遭到时间分析攻击,不要用简单的比较操作符(==)。为了使用这些函数,你需要将它集成到已有的网
络或消息代码中。例如,对于sockets,服务器代码应该类似下面:
fromsocketimportsocket,AF_INET,SOCK_STREAM
secret_key=bpeekaboo
defecho_handler(client_sock):
ifnotserver_authenticate(client_sock,secret_key):
client_sock.close()
return
hileTrue:
msg=client_sock.recv(8192)
ifnotmsg:
break
client_sock.sendall(msg)
defecho_server(address):
s=socket(AF_INET,SOCK_STREAM)
s.bind(address)
s.listen(5)
hileTrue:
c,a=s.accept()
echo_handler(c)
echo_server((,18000))
Withinaclient,yououlddothis:
fromsocketimportsocket,AF_INET,SOCK_STREAM
secret_key=bpeekaboo
s=socket(AF_INET,SOCK_STREAM)
s.connect((localhost,18000))
client_authenticate(s,secret_key)
s.send(bHelloWorld)
resp=s.recv(1024)
讨讨论论
hmac认证的一个常见使用场景是内部消息通信系统和进程间通信。例如,如果你编写的系统涉及到一个集群中多个处理器之
间的通信,你可以使用本节
您可能关注的文档
- 从12V到plusmn;15V电路_AC_DCAD电子.pdf
- MATLABMATLAB实现基于Transformer-SV文档.docx
- 变频器中IGBT爆炸原因分析,深入透彻!_igbt炸管原因资.pdf
- 20080814数据库表及字段说明.doc
- redis-Redis集群下过期key监听的实现代码.pdf
- 04-0309-01信息安全设计方案评审表.doc
- 耐视康耐视PatMax实现视觉导向机器人系统.pdf
- HIS系统接口的说明x资源.docx
- 软件设计师英文真题、译文及答案1.doc
- RTL8201--电子电路原理图.pdf
- 《FreeRTOS全攻略:从入门到精通》,实时操作系统核心技.doc
- red5集群cluster方案资源.doc
- jQuery使用zTree插件实现可拖拽的树示例资源.pdf
- 斩波型运放降低噪声的原理探讨资源.pdf
- 用python对excel查重源码.pdf
- Android实现系统打印功能_android实现打印功能,.pdf
- 伺服压力机与MCGS、昆仑通态触摸屏:实时曲线、历史数据存盘与完整PLC程序功能概述.pdf
- STM32-DMA传输异常问题分析与解决方案.docx
- 基于Qt+Opencv+c++的灰度信息ncc模板匹配算法:跨平台、高效率、稳定性强的全新实现.pdf
- 2-1绝缘电阻算法电机绝缘电阻多少正常资源.doc
原创力文档


文档评论(0)