讲师中心 微信公众号
AI工具推荐 视频效率加速

Python Django接口怎么加密参数_前端RSA加密结合后端解密拦截器

夜宇小哥_4171

夜宇小哥_4171

发布时间:2026-04-20 21:43:40

|

218人浏览过

|

来源于php中文网

原创

完全可行,但需前后端密钥格式、PKCS#1 v1.5填充严格一致;前端禁用encryptLong分段,单次加密≤117字节;公私钥须为PEM格式且未加密;Django中间件解密时须重置_request._body和_request._post。

python django接口怎么加密参数_前端rsa加密结合后端解密拦截器

前端用 jsencrypt 加密,后端用 cryptography 解密是否可行

完全可行,但要注意密钥格式和填充方式必须严格一致。jsencrypt 默认使用 PKCS#1 v1.5 填充,后端 cryptography 必须显式指定 padding.PKCS1v15(),否则解密失败并抛出 ValueError: Encryption/decryption failed.。

常见错误是前端用 encryptLong 分段加密(自动切块),而后端只调用一次 private_key.decrypt() —— 这会导致解密失败或乱码。正确做法是:前端不拆分,单次加密不超过 117 字节(2048 位 RSA);或后端手动分段解密(不推荐,易出错)。

  • 前端 RSA 公钥需转成 PEM 格式字符串(含 -----BEGIN PUBLIC KEY----- 头尾),不能直接用 JWK 或 base64 纯模幂值
  • 后端私钥必须是 PEM 格式且未加密(即无 passphrase),否则 load_pem_private_key() 会报 ValueError: Could not deserialize key data.
  • 加密前建议对原始参数 JSON 序列化 + UTF-8 编码,避免中文乱码;解密后需用 .decode('utf-8') 转回字符串

Django 中间件拦截 POST 参数并自动解密

不要在视图里重复写解密逻辑。用中间件统一处理最稳妥,但注意:Django 中间件的 process_request 拿不到已解析的 request.POST(因为它是惰性解析的),必须主动读取 request.body 并替换为解密后的字典。

关键点在于解密后要重置 request._body 和 request._post,否则后续视图仍读到原始密文。示例代码核心片段:

立即学习“Python免费学习笔记(深入)”;

Galileo python sdk
Galileo python sdk

Galileo AI 平台 Python SDK 完整参考,用于评估、监控和保护 GenAI 应用,适用于构建 Python 应用。

下载
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.serialization import load_pem_private_key
<p>class RSADecryptMiddleware:
def <strong>init</strong>(self, get_response):
self.get_response = get_response
with open('/path/to/private_key.pem', 'rb') as f:
self.private_key = load_pem_private_key(f.read(), password=None)</p><pre class='brush:python;toolbar:false;'>def __call__(self, request):
    if request.method == 'POST' and request.content_type == 'application/json':
        try:
            encrypted_data = json.loads(request.body).get('data')
            if encrypted_data:
                decrypted = self.private_key.decrypt(
                    base64.b64decode(encrypted_data),
                    padding.PKCS1v15()
                )
                # 替换原始 body 为解密后的内容
                request._body = decrypted
                request._post = QueryDict(decrypted, encoding='utf-8')
        except Exception as e:
            # 记录日志,但不拦截,让视图自行处理异常
            pass
    return self.get_response(request)</pre>
  • 务必检查 request.content_type,避免对 form-data、文件上传等非 JSON 请求误操作
  • 不要覆盖 request.POST 属性(它是只读 property),而是设置 request._post 和 request._body
  • 中间件顺序很重要:必须放在 SessionMiddleware 之后、CommonMiddleware 之前,否则 request.body 可能已被消耗

如何安全传递 RSA 公钥给前端

公钥本身可公开,但必须防篡改。最简单可靠的方式是:后端在登录成功响应中返回公钥 PEM 字符串(去头尾换行,base64 编码),前端缓存并用于后续请求加密。

绝对不要把公钥硬编码在 JS 文件里,也不要用 API 接口单独暴露(容易被爬或注入)。如果必须预置,至少用 Django 模板渲染进 HTML 的 <script> 标签内,并开启 CSP 防止 XSS 注入伪造公钥。

  • 公钥传输时建议加签名(如用服务端私钥对公钥内容做 HMAC-SHA256),前端校验通过再使用
  • 前端每次加密前应校验公钥长度(如 key.length === 2048),防止被中间人替换成弱密钥
  • 公钥过期策略:可配合 JWT 的 jti 或自定义 header 字段,服务端拒绝使用已废弃公钥加密的请求

为什么不用 JWT 或 HTTPS 就要自己加 RSA

HTTPS 只保证传输层加密,不解决「参数在服务端被日志明文记录」或「内部微服务间转发时被窃听」的问题。RSA 加密是应用层保护,确保敏感字段(如身份证号、银行卡号)从进入 Django 到落库全程不可见。

但代价明显:性能开销大(RSA 解密比 AES 慢百倍以上)、无法加密大字段、密钥轮换复杂。真实项目中更常见的做法是:仅对极少数高敏字段(如 id_card、bank_account)做 RSA 加密,其余走 HTTPS + 字段级 AES(用 KMS 托管密钥)。

最容易被忽略的是日志脱敏——即使加了 RSA,如果在中间件解密后还把 request.POST 原样打到日志里,等于白做。必须在日志中间件中过滤掉已解密的敏感键名。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2483

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6390

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

5786

2024.03.19

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2483

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5343

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6390

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

5978

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

843

2024.05.22

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn