如何加密 DRF 中的响应?

How to encrypt responses in DRF?

我想加密我的 DRF 项目 API 响应 有没有办法加密大型响应,以便我只能访问前端的数据? 我想加密所有回复。

是的,这是可能的,我已经自己应用了。您可以使用直接应用于序列化器的 AES256(高级加密标准 256)来实现。

基本上加密都是靠django的secret key来加解密。

因此,将有两个函数encrypt()decrypt(),您将在其中申请每个需要加密发送到数据库中的字段。以及在端点命中 GET 请求时解密。

You can get these function example and implementation here.

示例:

from rest_framework import serializers
from django.conf import settings
from aesencryption import AESCipher

aes = AESCipher(settings.SECRET_KEY[:16], 32)


class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ['name', 'address']

    def create(self, validated_data):
        # Here the data will be inserted into the db encrypted.
        validated_data['name'] = aes.encrypt(validated_data['name'])
        validated_data['address'] = aes.encrypt(validated_data['address'])
        return MyModel.objects.create(**validated_data)

    def to_representation(self, instance):
        # Here you will decrypt the data from the db.
        return {
            'name': aes.decrypt(instance.name),
            'address': aes.decrypt(instance.address)
        }

警告: 更改 secrete_key 时要小心。如果丢失,则无法取回数据。