cryptography 的目標是成為“人類易於使用的密碼學包cryptography for humans”,就像 requests 是“人類易於使用的 HTTP 庫HTTP for Humans”一樣。這個想法使你能夠創建簡單安全、易於使用的加密方案。如果有需要的話,你也可以使用一些底層的密碼學基元,但這也需要你知道更多的細節,否則創建的東西將是不安全的。
如果你使用的 Python 版本是 3.5, 你可以使用 pip 安裝,如下:
1
|
pip
install
cryptography
|
你會看到 cryptography 包還安裝了一些依賴包(LCTT 譯注:如 libopenssl-devel)。如果安裝都順利,我們就可以試着加密一些文本了。讓我們使用 Fernet 對稱加密算法,它保證了你加密的任何信息在不知道密碼的情況下不能被篡改或讀取。Fernet 還通過 MultiFernet 支持密鑰輪換。下面讓我們看一個簡單的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> from cryptography.fernet
import
Fernet
>>> cipher_key = Fernet.generate_key()
>>> cipher_key
b
'APM1JDVgT8WDGOWBgQv6EIhvxl4vDYvUnVdg-Vjdt0o='
>>> cipher = Fernet(cipher_key)
>>> text = b
'My super secret message'
>>> encrypted_text = cipher.encrypt(text)
>>> encrypted_text
(b
'gAAAAABXOnV86aeUGADA6mTe9xEL92y_m0_TlC9vcqaF6NzHqRKkjEqh4d21PInEP3C9HuiUkS9f'
b
'6bdHsSlRiCNWbSkPuRd_62zfEv3eaZjJvLAm3omnya8='
)
>>> decrypted_text = cipher.decrypt(encrypted_text)
>>> decrypted_text
b
'My super secret message'
|
首先我們需要導入 Fernet,然后生成一個密鑰。我們輸出密鑰看看它是什么樣兒。如你所見,它是一個隨機的字節串。如果你願意的話,可以試着多運行 generate_key 方法幾次,生成的密鑰會是不同的。然后我們使用這個密鑰生成 Fernet 密碼實例。
現在我們有了用來加密和解密消息的密碼。下一步是創建一個需要加密的消息,然后使用 encrypt 方法對它加密。我打印出加密的文本,然后你可以看到你再也讀不懂它了。為了解密出我們的秘密消息,我們只需調用 decrypt 方法,並傳入加密的文本作為參數。結果就是我們得到了消息字節串形式的純文本。