最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 實(shí)現(xiàn)簡單的客戶端認(rèn)證

 更新時(shí)間:2020年07月29日 08:40:08   作者:David Beazley  
這篇文章主要介紹了Python 如何實(shí)現(xiàn)簡單的客戶端認(rèn)證,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

問題

你想在分布式系統(tǒng)中實(shí)現(xiàn)一個(gè)簡單的客戶端連接認(rèn)證功能,又不想像SSL那樣的復(fù)雜。

解決方案

可以利用 hmac 模塊實(shí)現(xiàn)一個(gè)連接握手,從而實(shí)現(xiàn)一個(gè)簡單而高效的認(rèn)證過程。下面是代碼示例:

import hmac
import os

def client_authenticate(connection, secret_key):
  '''
  Authenticate client to a remote service.
  connection represents a network connection.
  secret_key is a key known only to both client/server.
  '''
  message = connection.recv(32)
  hash = hmac.new(secret_key, message)
  digest = hash.digest()
  connection.send(digest)

def server_authenticate(connection, secret_key):
  '''
  Request client authentication.
  '''
  message = os.urandom(32)
  connection.send(message)
  hash = hmac.new(secret_key, message)
  digest = hash.digest()
  response = connection.recv(len(digest))
  return hmac.compare_digest(digest,response)

基本原理是當(dāng)連接建立后,服務(wù)器給客戶端發(fā)送一個(gè)隨機(jī)的字節(jié)消息(這里例子中使用了 os.urandom() 返回值)。 客戶端和服務(wù)器同時(shí)利用hmac和一個(gè)只有雙方知道的密鑰來計(jì)算出一個(gè)加密哈希值。然后客戶端將它計(jì)算出的摘要發(fā)送給服務(wù)器, 服務(wù)器通過比較這個(gè)值和自己計(jì)算的是否一致來決定接受或拒絕連接。摘要的比較需要使用 hmac.compare_digest() 函數(shù)。 使用這個(gè)函數(shù)可以避免遭到時(shí)間分析攻擊,不要用簡單的比較操作符(==)。 為了使用這些函數(shù),你需要將它集成到已有的網(wǎng)絡(luò)或消息代碼中。例如,對于sockets,服務(wù)器代碼應(yīng)該類似下面:

from socket import socket, AF_INET, SOCK_STREAM

secret_key = b'peekaboo'
def echo_handler(client_sock):
  if not server_authenticate(client_sock, secret_key):
    client_sock.close()
    return
  while True:

    msg = client_sock.recv(8192)
    if not msg:
      break
    client_sock.sendall(msg)

def echo_server(address):
  s = socket(AF_INET, SOCK_STREAM)
  s.bind(address)
  s.listen(5)
  while True:
    c,a = s.accept()
    echo_handler(c)

echo_server(('', 18000))

Within a client, you would do this:

from socket import socket, AF_INET, SOCK_STREAM

secret_key = b'peekaboo'

s = socket(AF_INET, SOCK_STREAM)
s.connect(('localhost', 18000))
client_authenticate(s, secret_key)
s.send(b'Hello World')
resp = s.recv(1024)

討論

hmac 認(rèn)證的一個(gè)常見使用場景是內(nèi)部消息通信系統(tǒng)和進(jìn)程間通信。 例如,如果你編寫的系統(tǒng)涉及到一個(gè)集群中多個(gè)處理器之間的通信, 你可以使用本節(jié)方案來確保只有被允許的進(jìn)程之間才能彼此通信。 事實(shí)上,基于 hmac 的認(rèn)證被 multiprocessing 模塊使用來實(shí)現(xiàn)子進(jìn)程直接的通信。

還有一點(diǎn)需要強(qiáng)調(diào)的是連接認(rèn)證和加密是兩碼事。 認(rèn)證成功之后的通信消息是以明文形式發(fā)送的,任何人只要想監(jiān)聽這個(gè)連接線路都能看到消息(盡管雙方的密鑰不會被傳輸)。

hmac認(rèn)證算法基于哈希函數(shù)如MD5和SHA-1,關(guān)于這個(gè)在IETF RFC 2104中有詳細(xì)介紹。

以上就是Python 實(shí)現(xiàn)簡單的客戶端認(rèn)證的詳細(xì)內(nèi)容,更多關(guān)于Python 客戶端認(rèn)證的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python使用Pandas讀取CSV文件數(shù)據(jù)的操作方法

    Python使用Pandas讀取CSV文件數(shù)據(jù)的操作方法

    Pandas?是?Python?中一個(gè)強(qiáng)大的數(shù)據(jù)分析庫,它提供了大量的工具用于數(shù)據(jù)操作和分析,其中,read_csv?函數(shù)是?Pandas?中最常用的函數(shù)之一,用于從?CSV?文件中讀取數(shù)據(jù),本文將詳細(xì)介紹?read_csv?的基本用法,常見問題及其解決方案,并通過代碼案例進(jìn)行說明
    2024-12-12
  • Python爬取國外天氣預(yù)報(bào)網(wǎng)站的方法

    Python爬取國外天氣預(yù)報(bào)網(wǎng)站的方法

    這篇文章主要介紹了Python爬取國外天氣預(yù)報(bào)網(wǎng)站的方法,可實(shí)現(xiàn)抓取國外天氣預(yù)報(bào)信息的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python外星人入侵游戲編程完整版

    Python外星人入侵游戲編程完整版

    這篇文章主要為大家詳細(xì)介紹了Python外星人入侵游戲編程完整的實(shí)現(xiàn)思路,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Python基于gevent實(shí)現(xiàn)文件字符串查找器

    Python基于gevent實(shí)現(xiàn)文件字符串查找器

    這篇文章主要介紹了Python基于gevent實(shí)現(xiàn)文件字符串查找器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 15個(gè)應(yīng)該掌握的Jupyter Notebook使用技巧(小結(jié))

    15個(gè)應(yīng)該掌握的Jupyter Notebook使用技巧(小結(jié))

    這篇文章主要介紹了15個(gè)應(yīng)該掌握的Jupyter Notebook使用技巧(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Gradio中button組件的基本使用方式

    Gradio中button組件的基本使用方式

    Gradio中的button組件用于實(shí)現(xiàn)點(diǎn)擊事件,通過click事件綁定函數(shù)來處理值的變化,點(diǎn)擊時(shí),函數(shù)接收組件的值作為輸入,返回新的值或更新組件的屬性,示例代碼展示了如何在點(diǎn)擊按鈕時(shí)修改文本框的值并控制按鈕的可見性
    2024-11-11
  • Python pandas自定義函數(shù)的使用方法示例

    Python pandas自定義函數(shù)的使用方法示例

    這篇文章主要介紹了Python pandas自定義函數(shù)的使用方法,結(jié)合實(shí)例形式分析了pandas模塊相關(guān)自定義函數(shù)數(shù)值運(yùn)算操作技巧,需要的朋友可以參考下
    2019-11-11
  • Python 爬蟲多線程詳解及實(shí)例代碼

    Python 爬蟲多線程詳解及實(shí)例代碼

    這篇文章主要介紹了Python 爬蟲多線程詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Python關(guān)于維卷積的理解

    Python關(guān)于維卷積的理解

    這篇文章主要介紹了Python關(guān)于維卷積的理解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • numpy庫與pandas庫axis=0,axis= 1軸的用法詳解

    numpy庫與pandas庫axis=0,axis= 1軸的用法詳解

    這篇文章主要介紹了numpy庫與pandas庫axis=0,axis= 1軸的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評論

广宗县| 宣武区| 堆龙德庆县| 图们市| 贵阳市| 佳木斯市| 寻乌县| 象州县| 开江县| 阳谷县| 唐海县| 江油市| 顺平县| 谷城县| 宜川县| 桦南县| 井冈山市| 莫力| 沙洋县| 金昌市| 高尔夫| 磐石市| 通道| 兰西县| 安溪县| 鹤山市| 五华县| 崇明县| 扶余县| 西青区| 正宁县| 台北市| 开封市| 平陆县| 望奎县| 永靖县| 新余市| 资阳市| 盈江县| 抚州市| 介休市|