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

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

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

問題

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

解決方案

可以利用 hmac 模塊實現(xiàn)一個連接握手,從而實現(xià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)

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

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

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

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

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

相關文章

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

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

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

    Python爬取國外天氣預報網(wǎng)站的方法

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

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

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

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

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

    15個應該掌握的Jupyter Notebook使用技巧(小結(jié))

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

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

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

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

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

    Python 爬蟲多線程詳解及實例代碼

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

    Python關于維卷積的理解

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

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

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

最新評論

西乌| 绥芬河市| 泰安市| 元阳县| 思南县| 长岭县| 平果县| 福清市| 西平县| 晋州市| 九龙县| 通州区| 东丽区| 西藏| 资源县| 尤溪县| 南宫市| 武定县| 东辽县| 万山特区| 泗阳县| 普兰县| 双辽市| 玉山县| 秦安县| 银川市| 赞皇县| 二连浩特市| 天气| 辽宁省| 都昌县| 罗田县| 宜宾市| 水城县| 嘉禾县| 鄄城县| 静安区| 和硕县| 张掖市| 资阳市| 闽清县|