from cryptography.fernet import Fernet
import base64
# Put this somewhere safe!
key = Fernet.generate_key()
f = Fernet()
token = f.encrypt(b"A really secret message. Not for prying eyes.")
token
print f.decrypt(token)
如何生成自己的密钥而不是fernet.genrate_key()
?
答案 0 :(得分:8)
该实现显示了如何完成此操作:
return base64.urlsafe_b64encode(os.urandom(32))
因此,为了生成您自己的,您将需要生成32个加密安全的随机字节,然后urlsafe base64对它们进行编码。当然,由于generate_key
已经这样做了,你应该调用它,除非你需要在Python进程之外生成密钥。
答案 1 :(得分:1)
在Bash中,你可以这样做:
dd if=/dev/urandom bs=32 count=1 2>/dev/null | openssl base64
答案 2 :(得分:1)
在Fernet中,可以使用Fernet的Key Derivation Functions之一来生成密钥
fernet提供的功能之一是“基于密码的密钥派生功能2”。 可以在Using Passwords with Fernet找到使用PBKDF2HMAC的示例。在git issue #1333 of pyca/cryptography中对此进行了讨论,maebert指出,该示例使用salt = os.urandom(16),并且每当用不同的salt值构造kdf类时,都会从密码生成一个新密钥。
如果您需要使用自定义密钥派生功能,请查看kdf的源代码 和pbkdf2 具有实现KeyDerivationFunction接口的类的示例。
匹配其签名并实现该接口的类应该能够作为自定义键派生函数插入。