You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中运行加密函数并通过urls.py进行测试

解决Django加密函数测试与路由配置问题

一、修正现有代码的问题并编写测试视图

你的现有代码存在两个关键问题:

  • 模块级别的testaudio会在Django启动时仅执行一次,无法获取最新上传的音频数据;
  • 密钥key = 'testing'长度仅7字节,不符合assert len(key) == key_bytes的16字节要求,会触发断言错误。

以下是修正后的完整代码:

# 导入必要依赖
from Crypto.Cipher import AES, Counter
import binascii
from Crypto.Random import Random
from django.http import HttpResponse
from .models import Audio_store

key_bytes = 16

def encrypt(key, plaintext):
    assert len(key) == key_bytes, "密钥长度必须为16字节"
    # 生成随机初始化向量(IV)
    iv = Random.new().read(AES.block_size)
    iv_int = int(binascii.hexlify(iv), 16)
    ctr = Counter.new(AES.block_size * 8, initial_value=iv_int)
    # 创建AES-CTR加密器并加密
    aes = AES.new(key, AES.MODE_CTR, counter=ctr)
    ciphertext = aes.encrypt(plaintext)
    return (iv, ciphertext)

# 用于测试加密函数的视图
def test_encrypt(request):
    # 获取最新上传的音频数据(flat=True确保返回单个值而非元组)
    latest_audio_entry = Audio_store.objects.all().values_list('audio', flat=True).last()
    if not latest_audio_entry:
        return HttpResponse("未找到已上传的音频数据")
    
    # 补全密钥到16字节(测试用,正式环境请用安全方式管理密钥)
    key = 'testing123456789'
    
    try:
        # 处理FileField类型的音频字段:读取文件内容
        if hasattr(latest_audio_entry, 'read'):
            plaintext = latest_audio_entry.read()
        else:
            plaintext = latest_audio_entry
        
        # 调用加密函数
        iv, ciphertext = encrypt(key, plaintext)
        
        # 控制台打印调试信息
        print(f"IV: {iv.hex()}")
        print(f"密文长度: {len(ciphertext)}")
        
        # 返回页面响应提示结果
        return HttpResponse(f"加密成功!<br>IV(十六进制): {iv.hex()}<br>密文长度: {len(ciphertext)}")
    except AssertionError as e:
        return HttpResponse(f"参数错误:{str(e)}")
    except Exception as e:
        return HttpResponse(f"加密失败:{str(e)}")

二、配置urls.py路由

应用级urls.py(你的APP目录下)

添加测试路由映射:

from django.urls import path
from . import views

urlpatterns = [
    # 保留你已有的其他路由
    path('test-encrypt/', views.test_encrypt, name='test_encrypt'),
]

项目根urls.py

如果尚未包含应用路由,需添加如下配置(替换your_app_name为你的实际应用名称):

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('your-app-name/', include('your_app_name.urls')),
]

三、测试加密函数

  1. 确保已通过HTML页面上传过音频数据到Audio_store模型;
  2. 启动Django开发服务器:python manage.py runserver;
  3. 在浏览器访问:http://localhost:8000/your-app-name/test-encrypt/(替换your-app-name为你的应用名);
  4. 查看页面返回结果,同时观察终端控制台的打印信息,确认IV和密文是否正常生成。

额外注意事项

  • 如果Audio_store的audio字段是FileField,需确保读取文件内容的逻辑正确;
  • 测试用密钥仅作演示,正式环境请勿硬编码密钥,建议使用环境变量或加密配置文件管理;
  • 可在Audio_store模型中添加iv和ciphertext字段,用于存储加密后的结果以便后续解密。

内容的提问来源于stack exchange,提问作者HelpMePlease

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:18:24