django 從零開始 11 根據時間戳加密資料

2022-06-02 05:12:08 字數 3272 閱讀 1430

django自帶乙個加密的方法signer,對資料進行乙個加密

一般這種方式用於賬號密碼郵箱找回,或者token設定

class

timestampsigner(signer):

deftimestamp(self):

return

baseconv.base62.encode(int(time.time()))

defsign(self, value):

value = '

%s%s%s

' %(value, self.sep, self.timestamp())

return

super().sign(value)

def unsign(self, value, max_age=none):

"""retrieve original value and check it wasn't signed more

than max_age seconds ago.

"""result =super().unsign(value)

value, timestamp = result.rsplit(self.sep, 1)

timestamp =baseconv.base62.decode(timestamp)

if max_age is

notnone:

ifisinstance(max_age, datetime.timedelta):

max_age =max_age.total_seconds()

#check timestamp is not older than max_age

age = time.time() -timestamp

if age >max_age:

raise

signatureexpired(

'signature age %s > %s seconds

' %(age, max_age))

return value

這是django文件中的原始碼 ,可以看到是繼承自signer類的,其中sign函式是對輸入的資料加上當前時間戳進行乙個加密

unsign則是驗證加密資料是否過時,得到傳入加密資料的時間戳,對函式中max_age時間轉換為時間格式對比,如果當前時間減去加密資料的時間大於設定的規定時間,則丟擲異常,不然返回正確的值

但是有個大問題,就是 加密資料會顯示出來      比如加密資料  會顯示為' :fszfdfyhyrtcfvdrsvg15r1x32b'  這種明顯不行

後來在網上查詢 發現sign類中含有序列化進行乙個加密 並且可以新增對時間的控制

其實就是將上面的 timestampsigner 類的時間戳加密弄過來了 返回一串加密字元          其中預設使用當時時間戳進行時間認證 不像flask在進行加密時可以確認過期時間 相反

可以儲存到cookies中,進下乙個頁面需要驗證使用這個驗證(ps在這cookies卡了好久,我還以為咋cookeis沒傳過去,一直是空的 原來需要httpresponse設定...)

解密sign 值

同樣也是 timestampsigner 的時間戳解密  原始碼如下

key和sigin加密一樣預設不設定,先以簡單為主     

其中有乙個引數max_age(用來對比時間)  unsign解密原始碼

比如你是在1點10分進行乙個加密,加密sign數值中含有1點10分的時間,使用unsign解密 輸入max_age=60  數值為秒  不設定則為永久存在

解密過程中對比 將時間格式化     當前解密時的時間 減去 

加密的時間  得到相減的時間 如果大於設定過期時間 丟擲異常 不然返回解密值

所以我的**是 

加密

from datetime import

獲取sign值成功')

req.set_cookie(

'sign

',value)

return req

解密

def

get_sign(request):

value = request.cookies.get('

sign')

print

(value)

s = '

沒有獲取到sign'if

value:

try:

s = signing.loads(value,max_age=20)    # 設定過期時間

print

(s,datetime.now())

print

(type(s))            # 加密時什麼格式 返回什麼格式

except

:

print('

sign過期

',datetime.now())

s = '

sign過期

結果

獲取不過期的sign  並得到結果 傳入dict得到dict

對比設定解密時間過期 結果

設定的20秒過期  設定sign時間為20:42:23   獲取sign的時間為20:43:38  哪怕能獲取到sign值,也會解密錯誤

Django 從零開始

方法1 pip install django 1.6.5 測試是否安裝成功 python import django 1,6,5,final 0 django 使用了 python 標準的 distutils 安裝法,在 linux 平台可能包括如下步驟 tar xzvf django tar.gz...

Django 從零開始

方法1 pip install django 1.6.5 測試是否成功安裝 python import django 1,6,5,final 0 django 使用了 python 標準的 distutils 安裝法,在 linux 平台可能包含例如以下步驟 tar xzvf django tar....

時間管理 從零開始GTD GTD原則

收集把任何你需要跟蹤 記住 或者要做的事情全部記錄到 收集箱 中 乙個收件箱,電子郵箱,磁帶,筆記本,pda等等。把你腦中所有東西都清理出來,放入你的收集裝置中,準備進行下一步的處理。每天抽幾十分鐘收集一下腦中的資訊,記錄到你的收集裝置中。處理 將你收集到的任何資訊進行處理。每個星期至少處理清空一次...