認證客戶端鏈結合法性(Python)

2021-09-26 09:10:48 字數 3688 閱讀 6783

服務端**:

from socket import

*import hmac, os

secret_key = b'123456io p'

defconn_auth

(conn)

:'''

認證客戶端鏈結

:param conn:

:return:

'''print

('開始驗證新鏈結的合法性'

) msg = os.urandom(32)

#產生32位隨機數

conn.sendall(msg)

#傳送給客戶端

h = hmac.new(secret_key, msg)

#雜湊驗證

digest = h.digest(

)#得到數字形式

respone = conn.recv(

len(digest)

)#客戶端回應的訊息

return hmac.compare_digest(respone, digest)

#比較兩個數字是否一樣

defdata_handler

(conn, bufsize=

1024):

#判斷鏈結是否合法

ifnot conn_auth(conn)

:print

('該鏈結不合法。關閉。'

) conn.close(

)return

print

('該鏈結合法,開始通訊...'

)#通訊迴圈

while

true

: data = conn.recv(bufsize)

ifnot data:

break

conn.sendall(data.upper())

defserver_handler

(ip_port, bufsize, backlog=5)

:'''

只處理鏈結

:param ip_port:

:param bufsize:

:param backlog:

:return:

'''tcp_socket_server = socket(af_inet, sock_stream)

tcp_socket_server.bind(ip_port)

tcp_socket_server.listen(backlog)

#接收鏈結

while

true

: conn, addr = tcp_socket_server.accept(

)print

('新鏈結[%s:%s]'

%(addr[0]

, addr[1]

))data_handler(conn, bufsize)

if __name__ ==

'__main__'

: ip_port =

('127.0.0.1'

,8000

) bufsize =

1024

server_handler(ip_port, bufsize)

合法客戶端**:

from socket import

*import hmac, os

secret_key = b'123456io p'

defconn_auth

(conn)

:'''

驗證客戶端到伺服器的鏈結

:param conn:

:return:

'''msg = conn.recv(32)

#收32個位元組(服務端傳送的訊息)

h = hmac.new(secret_key, msg)

digest = h.digest(

) conn.sendall(digest)

defclient_handler

(ip_port, bufsize=

1024):

tcp_socket_client = socket(af_inet, sock_stream)

tcp_socket_client.connect(ip_port)

conn_auth(tcp_socket_client)

while

true

: data =

input

('>>:'

).strip()if

not data:

continue

if data ==

'quit'

:break

tcp_socket_client.sendall(data.encode(

'utf-8'))

respone = tcp_socket_client.recv(bufsize)

print

(respone.decode(

'utf-8'))

tcp_socket_client.close(

)if __name__ ==

'__main__'

: ip_port =

('127.0.0.1'

,8000

) bufsize =

1024

client_handler(ip_port, bufsize)

執行結果:

不合法客戶端**(不知道加密方式):

from socket import

*def

client_handler

(ip_port, bufsize=

1024):

tcp_socket_client = socket(af_inet, sock_stream)

tcp_socket_client.connect(ip_port)

while

true

: data =

input

('>>:'

).strip()if

not data:

continue

if data ==

'quit'

:break

tcp_socket_client.sendall(data.encode(

'utf-8'))

respone = tcp_socket_client.recv(bufsize)

print

(respone.decode(

'utf-8'))

tcp_socket_client.close(

)if __name__ ==

'__main__'

: ip_port =

('127.0.0.1'

,8000

) bufsize =

1024

client_handler(ip_port, bufsize)

執行結果:

認證客戶端的鏈結合法性

摘自 如果你想在分布式系統中實現乙個簡單的客戶端鏈結認證功能,又不像ssl那麼複雜,那麼利用hmac 加鹽的方式來實現 server.py coding utf 8 author linhaifeng from socket import import hmac,os secret key b li...

CAS客戶端認證流程

step 1 瀏覽器向cas客戶端發起登陸請求,cas客戶端生成 登陸url 並把瀏覽器重定向到該url 登陸url https cas server login?service 其中 cas server host cas認證伺服器的網域名稱 cas server port cas認證伺服器的ip...

關於客戶端和 android OAuth認證方法

1 編寫微博的客戶端 最重要的就是使用者授權方法,現在主流的sns 社群開發api 後,基本都採用oauth認證進行授權,2 在分享過程中不可避免的會考慮到使用者的賬戶的安全性的問題,第三方程式不應該直接接觸使用者的賬戶的資訊,但是沒有賬戶資訊,但是沒有賬戶資訊,又如何取得sns 平台的資料呢,oa...