简而言之: 我想将加密的字符串存储在数据库中,并在需要时将其解密。最佳做法是什么?
上下文: 我正在构建一个使用需要登录名和密码的第三方API的应用程序。我想将用于第三方API的凭据存储在数据库中,因为它们将有许多不同的凭据。我一直在查看django文档和stackoverflow,但我只发现会散乱密码的内容。
编辑:我做了更多搜索,我真的很喜欢这个: https://github.com/georgemarshall/django-cryptography
在我发现的存储库中还有其他想法或意见吗?
答案 0 :(得分:1)
您应该创建一个自定义模型字段,并覆盖from_db_value()
和get_prep_value
来加密和解密字符串。您可以使用许多软件包来执行加密算法。
使用密码学,您可以执行以下操作:
from django.db.models import CharField
from cryptography.fernet import Fernet
from django.conf import settings
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
class SecureString(CharField):
"""Custom Encrypted Field"""
kdf = PBKDF2HMAC(algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=100000,
backend=default_backend())
key = base64.urlsafe_b64encode(kdf.derive(settings.SECRET_KEY))
f = Fernet(key)
def from_db_value(self, value, expression, connection):
return f.decrypt(value)
def get_prep_value(self, value):
return f.encrypt(value)
注意:您应该抽象出加密逻辑,以获得更理想的解决方案。