Python 中使用加密模組的 Fernet(對稱加密)
對稱加密是一種密碼學技術,其中客戶端到伺服器的訊息加密和解密都使用相同的金鑰。為了確保在透過易受攻擊的伺服器傳遞網路資料包時不會洩漏任何敏感資訊(駭客可能會利用此訊息進行惡意操作),加密訊息將是一個好主意。
對稱加密遵循一些步驟
金鑰生成:為了訪問訊息,客戶端和伺服器首先生成一個金鑰,並將其傳送給接收方以解密加密的訊息。如果金鑰洩露,則存在被洩露的風險。
加密:傳送方透過加密程式執行未加密的訊息,將其轉換為密文,密文通常對人眼來說是無法理解的,如果資訊無法理解,則對駭客也沒有多大用處。
傳輸:加密完成後,此密文可以透過任何不安全的通道傳送,幾乎不用擔心資料被洩露,因為它將以密文形式傳送。
解密:接收方收到密文或訊息後,可以使用傳送方提供的金鑰將密文解碼為明文。
Fernet
Fernet 是一種對稱加密技術,可在 Python 的加密模組中供使用者使用,它使加密和解密文字變得容易,併為密碼學初學者提供了一個簡單的介面。
Fernet 使用高階加密標準 (AES) 演算法對訊息進行編碼和解碼。AES 是一種高度安全、廣泛使用且流行的加密演算法,開發人員廣泛使用。
Fernet 的密文是 URL 安全的,這意味著我們可以透過全球資訊網傳送密文,從而使資料傳輸更加方便。
Fernet 使用隨機數生成器生成一個高度安全的字母數字金鑰。它是一個 32 位元組長的金鑰,使其高度抵禦暴力破解攻擊。
它還支援金鑰輪換,即能夠始終生成新金鑰並替換舊金鑰。
Fernet 支援時間戳和要與金鑰一起附加的資料序列化。這樣做是為了提高金鑰的安全性,因為將時間戳附加到金鑰將確保其有效期有限。
示例
使用 Python 中的加密模組,我們從其中匯入 Fernet 函式,我們可以從中生成用於加密和解密的金鑰。對訊息進行編碼會將其更改為密文,然後傳送到接收方,接收方將使用金鑰將訊息轉換回明文。
from cryptography.fernet import Fernet key=Fernet.generate_key() fernet = Fernet(key) msg="This is a sample message".encode() encrypted_msg=fernet.encrypt(msg) decrypted_msg=fernet.decrypt(encrypted_msg) decrypted_msg=decrypted_msg.decode() print("Original Message: ", msg.decode()) print("Encrypted Message: ", encrypted_msg) print("Decrypted Message: ", decrypted_msg)
輸出
Original Message: This is a sample message Encrypted Message: b'gAAAAABkXM2tcyWUdIY_vIXk1vbrPgELWu2v48RRohelbOrOUJIsECT4zUPaCkPqdd80Djf9t yqdxpbzaHBtG7hi0qle8me5BVlTv8VlJwW5scKKnnPsAAE=' Decrypted Message: This is a sample message
結論
對稱加密有很多優點
效率:與非對稱加密相比,它消耗更少的計算資源並且速度更快。
機密性:除非知道加密程式碼的金鑰,否則資料將安全無虞,即使駭客獲取了訊息,他們也無法從中推斷任何資訊,因為他們沒有金鑰。
但是,儘管它有所有優點,但它總體上在加密方面也面臨著一些挑戰
金鑰分發:對稱加密的一個重要因素是傳送方和接收方之間傳遞的金鑰。應以機密方式傳送金鑰,以確保加密資料的安全。隨著網路中使用者數量的增加,確保向所有接收方安全傳遞所有金鑰的複雜性也隨之增加。
金鑰管理:隨著參與者和加密訊息數量的增加,處理和使用整個網路中多個金鑰的複雜性也隨之增加,以確保資料安全。
有一些方法可以解決這些挑戰,混合加密方案被使用,其中對稱加密用於加密資料,而非對稱加密可以確保從傳送方到接收方的對稱金鑰的安全交換。這結合了對稱和非對稱加密的積極應用。