hmac模組(僅在python3中可以使用)
簡介:
hmac是金鑰相關的雜湊運算訊息認證碼,hmac運算利用雜湊演算法,以乙個金鑰和乙個訊息為輸入,生成乙個訊息摘要作為輸出。典型應用:
hmac的乙個典型應用是用在「質疑/應答」(challenge/response)身份認證中。認證流程:
(1) 先由客戶端向伺服器發出乙個驗證請求。生成token:(2) 伺服器接到此請求後生成乙個隨機數並通過網路傳輸給客戶端(此為質疑)。
(3) 客戶端將收到的隨機數提供給epass,由epass使用該隨機數與儲存在epass中的金鑰進行hmac-md5運算並得到乙個結果作為認證證據傳給伺服器(此為響應)。
(4) 與此同時,伺服器也使用該隨機數與儲存在伺服器資料庫中的該客戶金鑰進行hmac-md5運算,如果伺服器的運算結果與客戶端傳回的響應結果相同,則認為客戶端是乙個合法使用者。
import time
import base64
import hmac
defgenerate_token
(key, expire=60)
:"""
@args:
key: str (使用者給定的key,需要使用者儲存以便之後驗證token,每次產生token時的key 都可以是同乙個key)
expire: int(最大有效時間,單位為s)
@return:
state: str
:param key:
:param expire:
:return:
"""ts_str =
str(time.time(
)+ expire)
ts_byte = ts_str.encode(
"utf-8"
) sha1_tshex_str = hmac.new(key.encode(
"utf-8"
), ts_byte,
'sha1'
).hexdigest(
) token = ts_str+
':'+sha1_tshex_str
b64_token = base64.urlsafe_b64encode(token.encode(
"utf-8"))
return b64_token.decode(
"utf-8"
)
驗證token:def
certify_token
(key, token)
:"""
@args:
key: str
token: str
@returns:
boolean
:param key:
:param token:
:return:
"""token_str = base64.urlsafe_b64decode(token)
.decode(
'utf-8'
) token_list = token_str.split(
':')
iflen
(token_list)!=2
:return
false
ts_str = token_list[0]
iffloat
(ts_str)
< time.time():
return
false
known_sha1_tsstr = token_list[1]
sha1 = hmac.new(key.encode(
"utf-8"
), ts_str.encode(
'utf-8'),
'sha1'
) calc_sha1_tsstr = sha1.hexdigest(
)if calc_sha1_tsstr != known_sha1_tsstr:
# token certification failed
return
false
# token certification success
return
true
第十章 hashlib模組和hmac模組
目錄hash是一種演算法,接收傳入的內容,經過運算得到的一串hash值 hash的特點 具有唯一性 安全性,可以用於儲存非明文密碼 無論傳入的什麼內容,返回的hash值長度都是固定的 import hashlib m hashlib.md5 建立了hash物件 print type m m.upda...
python模組使用 python 模組發布及使用
將模組 此處名為nester 寫好後,與setup.py放入同乙個資料夾中 from distutils.core importsetup setup name 發布名,一般同模組名 version 版本號 py modules 模組列表 引數,其他引數根據需求新增 構建發布檔案 在資料夾下開啟終端...
Python使用模組Pyserial模組報
用pip安裝pyserial後 sudo h pip install pyserial,執行新建的程式,名稱為serial.py,程式中用到 import serial.toos.list ports,但總是提示importerror no module named tools.list ports...