日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python能做哪些客户端_Python 实现简单的客户端认证

發(fā)布時間:2023/12/4 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python能做哪些客户端_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)

基本原理是當連接建立后,服務(wù)器給客戶端發(fā)送一個隨機的字節(jié)消息(這里例子中使用了 os.urandom() 返回值)。 客戶端和服務(wù)器同時利用hmac和一個只有雙方知道的密鑰來計算出一個加密哈希值。然后客戶端將它計算出的摘要發(fā)送給服務(wù)器, 服務(wù)器通過比較這個值和自己計算的是否一致來決定接受或拒絕連接。摘要的比較需要使用 hmac.compare_digest() 函數(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 認證的一個常見使用場景是內(nèi)部消息通信系統(tǒng)和進程間通信。 例如,如果你編寫的系統(tǒng)涉及到一個集群中多個處理器之間的通信, 你可以使用本節(jié)方案來確保只有被允許的進程之間才能彼此通信。 事實上,基于 hmac 的認證被 multiprocessing 模塊使用來實現(xiàn)子進程直接的通信。

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

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

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

總結(jié)

以上是生活随笔為你收集整理的python能做哪些客户端_Python 实现简单的客户端认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。