加密是對信息進行編碼的過程,只有授權(quán)方才能訪問它。這一點至關(guān)重要,因為它可以安全地保護您不希望任何人看到或訪問的數(shù)據(jù)。在本文中,您將學(xué)習(xí)如何使用Python使用加密 庫對文件或任何字節(jié)對象,也包括字符串對象進行加密。我們將使用對稱加密,這意味著用于加密數(shù)據(jù)的相同密鑰也可用于解密。那里有很多加密算法,我們將使用的庫是基于AES算法構(gòu)建的。
注意:了解加密和哈希算法之間的區(qū)別很重要 ,在加密中,一旦擁有密鑰,您就可以檢索原始數(shù)據(jù),而在 哈希函數(shù)中則不能,因此,它們被稱為單向加密。
讓我們從安裝加密開始:
pip3 install cryptography
打開一個新的Python文件,讓我們開始吧:
from cryptography.fernet import Fernet
生成密鑰
Fernet是對稱身份驗證密碼技術(shù)的實現(xiàn),讓我們首先生成該密鑰并將其寫入文件:
def write_key():
"""
Generates a key and save it into a file
"""
key = Fernet.generate_key()
with open("key.key", "wb") as key_file:
key_file.write(key)
generate_key()函數(shù)生成一個新的Fernet密鑰,您確實需要將其保存在安全的地方,如果丟失了密鑰,您將不再能夠解密使用此密鑰加密的數(shù)據(jù)。
由于此密鑰是唯一的,因此我們不會在每次加密任何內(nèi)容時生成密鑰,因此我們需要一個函數(shù)來為我們加載該密鑰:
def load_key():
"""
Loads the key from the current directory named `key.key`
"""
return open("key.key", "rb").read()
字符串加密
現(xiàn)在我們知道了如何獲取密鑰,讓我們從加密字符串對象開始,只是為了讓您首先熟悉它。
生成密鑰并將其寫入文件:
# generate and write a new key
write_key()
讓我們加載該密鑰:
# load the previously generated key
key = load_key()
一些消息:
message = "some secret message".encode()
我們需要對字符串進行編碼,以將其轉(zhuǎn)換為適合加密的字節(jié),encode()方法使用utf-8編解碼器對該字符串進行編碼。使用該鍵初始化Fernet類:
# initialize the Fernet class
f = Fernet(key)
加密消息:
# encrypt the message
encrypted = f.encrypt(message)
f.encrypt()方法對傳遞的數(shù)據(jù)進行加密,這種加密的結(jié)果稱為“ Fernet令牌”,并具有強大的隱私性和真實性保證。
讓我們看看它的外觀:
# print how it looks
print(encrypted)
輸出:
b'gAAAAABdjSdoqn4kx6XMw_fMx5YT2eaeBBCEue3N2FWHhlXjD6JXJyeELfPrKf0cqGaYkcY6Q0bS22ppTBsNTNw2fU5HVg-c-0o-KVqcYxqWAIG-LVVI_1U='
解密:
decrypted_encrypted = f.decrypt(encrypted)
print(decrypted_encrypted)
b'some secret message'
的確是同一條信息。
f.decrypt()方法解密Fernet令牌。成功解密后,這將返回原始明文作為結(jié)果,否則將引發(fā)異常。
關(guān)于如何在Python中加密和解密數(shù)據(jù)的問題,通過上述閱讀,想必大家已經(jīng)清楚了吧,想了解更多關(guān)于Python的信息,請繼續(xù)關(guān)注中培偉業(yè)。