Encryption
Fernet 的關鍵功能會在任何時間範圍內發揮作用嗎?
我對密碼學很陌生,我需要使用對稱密碼學方法。
我的簡單問題是,密鑰是否始終能夠解密加密文本?加密的文本可能有幾年的歷史,密鑰也會在幾年前保存。
是否有任何時間因素可能導致解密失敗?
不,解密通常沒有時間因素。
但是,您應該記住,即使是單個更改的位也可能導致解密失敗。如果該位是 IV、身份驗證標籤或 nonce 的一部分,情況尤其如此。所以我寧願擔心密鑰和數據的儲存。磁碟可能會卡住,快閃記憶體可能會降級或電壓差鬆動。
**TL;DR:**下面文章中的解釋有點煩人,但在我看來,仍然可以隨時解密所有消息,因為任何對稱密碼都是正常的。只要您有必要的密鑰,您就可以解密消息。
正如本文(PythonInformer)在“解密消息”部分中解釋的那樣:
decrypt
如果出於任何原因無法解碼令牌,將引發異常。例如:
- 令牌格式不正確,很可能是因為它的長度無效,請參見下文。
- HMAC 簽名不匹配。這可能是因為密鑰不正確或令牌在創建後已被修改。
- 令牌已過期。
Fernet 令牌包含允許測試過期消息的時間戳。為此,您必須在解密函式中添加一個 ttl(生存時間)參數,該參數指定令牌在被拒絕之前的最大使用期限(以秒為單位)。例如:
decoded = cipher.decrypt(token, 24*60*60)
這將拒絕任何超過 1 天的郵件。如果不設置 ttl 值(或將其設置為 None),則根本不會檢查令牌的年齡。