Python アプリにて「環境変数に設定した鍵を使用してデータを暗号化/復号化したい」場合の手順メモ。
この記事は簡易的な例として手順をまとめたものであり、この手順が安全であることを保証しません。特に鍵を環境変数にそのまま設定することは一般的には好ましくないので、各自よしなにご対応ください。
実装
cryptography を使用して以下のようにする。
crypt.py
from os import getenv
from cryptography.fernet import Fernet
CRYPT_KEY = getenv("CRYPT_KEY").encode()
def encrypt(data: bytes) -> bytes:
return Fernet(CRYPT_KEY).encrypt(data)
def decrypt(data: bytes) -> bytes:
return Fernet(CRYPT_KEY).decrypt(data)
使い方
鍵を生成する
from cryptography.fernet import Fernet
print(Fernet.generate_key().decode()) #=> '92CzBgyNP0JnMayKW0kgUTpGnjOVCTRSjpxBAVGBJns='
これを Python アプリの環境変数 CRYPT_KEY
に設定しておく。
暗号化
from crypt import encrypt
data = "吾輩は猫である"
data_encrypted = encrypt(data.encode())
print(data_encrypted) #=> b'gAAAAABlzCJpdEpaoGi4bovGXKldGcuXAl2Ue0hVH52ip_638Whb35jnYHAOOKAZECzF9GB6XYJJMtWGqOCpL1G9LsIdBhBV-Tooegb-0AIlwrGpuSSXcmA='
復号化
from crypt import decrypt
data_encrypted = b'gAAAAABlzCJpdEpaoGi4bovGXKldGcuXAl2Ue0hVH52ip_638Whb35jnYHAOOKAZECzF9GB6XYJJMtWGqOCpL1G9LsIdBhBV-Tooegb-0AIlwrGpuSSXcmA='
data = decrypt(data_encrypted).decode()
print(data) #=> '吾輩は猫である'