91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現簡單的客戶端認證

發布時間:2020-07-30 09:46:35 來源:億速云 閱讀:144 作者:小豬 欄目:開發技術

這篇文章主要講解了Python如何實現簡單的客戶端認證,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

問題

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

解決方案

可以利用 hmac 模塊實現一個連接握手,從而實現一個簡單而高效的認證過程。下面是代碼示例:

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)

基本原理是當連接建立后,服務器給客戶端發送一個隨機的字節消息(這里例子中使用了 os.urandom() 返回值)。 客戶端和服務器同時利用hmac和一個只有雙方知道的密鑰來計算出一個加密哈希值。然后客戶端將它計算出的摘要發送給服務器, 服務器通過比較這個值和自己計算的是否一致來決定接受或拒絕連接。摘要的比較需要使用 hmac.compare_digest() 函數。 使用這個函數可以避免遭到時間分析攻擊,不要用簡單的比較操作符(==)。 為了使用這些函數,你需要將它集成到已有的網絡或消息代碼中。例如,對于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 認證的一個常見使用場景是內部消息通信系統和進程間通信。 例如,如果你編寫的系統涉及到一個集群中多個處理器之間的通信, 你可以使用本節方案來確保只有被允許的進程之間才能彼此通信。 事實上,基于 hmac 的認證被 multiprocessing 模塊使用來實現子進程直接的通信。

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

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

看完上述內容,是不是對Python如何實現簡單的客戶端認證有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武平县| 明星| 韶山市| 远安县| 永平县| 铁岭市| 吉林省| 金平| 特克斯县| 凤庆县| 思茅市| 西丰县| 德令哈市| 黔西| 江西省| 白银市| 石林| 东港市| 嘉黎县| 安溪县| 禄丰县| 沭阳县| 兴仁县| 隆化县| 嘉善县| 宁河县| 永州市| 临夏县| 旬阳县| 库尔勒市| 呼和浩特市| 家居| 马公市| 安顺市| 平江县| 胶州市| 句容市| 山丹县| 四川省| 玉山县| 镇沅|