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

如何实现Bubble.io加密数据并在Python环境中解密?

Bubble.io加密数据后在Python Flask中解密的实现方案

完全可以实现Bubble.io加密敏感数据后,在Python Flask应用中解密处理,核心是确保两端使用相同的加密算法、密钥和参数。以下是针对你的POC场景的具体实现步骤:

1. 加密方案选择

推荐使用AES-GCM对称加密算法:

  • 自带数据认证(防止篡改),安全性高
  • Bubble.io可通过自定义JavaScript支持,Python端有成熟的库实现
  • 适合API传输场景,性能开销低

2. Bubble.io端加密实现(后端工作流)

Bubble的后端工作流可通过自定义JavaScript动作完成加密,步骤如下:

前置准备

在Bubble应用的Settings > SEO/Metatags中添加外部脚本,引入CryptoJS库:

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>

后端工作流加密代码

在Bubble的后端工作流中添加「Run JavaScript」动作,使用以下代码:

// 从Bubble环境变量获取密钥(提前在Settings > API > Environment Variables中配置)
const keyBase64 = "{{current_user's app's AES_SECRET_KEY}}";
const key = CryptoJS.enc.Base64.parse(keyBase64);

// 生成随机IV(GCM推荐12字节,每次加密都要新的)
const iv = CryptoJS.lib.WordArray.random(12);

// 待加密的敏感数据(替换为你的实际数据)
const sensitiveData = {
  user_email: "{{Current User's Email}}",
  secret_value: "your-sensitive-data-here"
};
const plaintext = CryptoJS.enc.Utf8.parse(JSON.stringify(sensitiveData));

// AES-GCM加密
const encrypted = CryptoJS.AES.encrypt(plaintext, key, {
  iv: iv,
  mode: CryptoJS.mode.GCM,
  padding: CryptoJS.pad.NoPadding
});

// 返回密文、IV、认证标签(用于Python端解密验证)
return {
  ciphertext: encrypted.ciphertext.toString(CryptoJS.enc.Base64),
  iv: iv.toString(CryptoJS.enc.Base64),
  tag: encrypted.authTag.toString(CryptoJS.enc.Base64)
};

之后在工作流中调用你的Flask API,将上述三个参数作为JSON请求体发送。

3. Python Flask端解密实现

前置依赖

安装加密库pycryptodome:

pip install pycryptodome

Flask解密代码

from flask import Flask, request, jsonify
from Crypto.Cipher import AES
import base64
import json
import os

app = Flask(__name__)

# 从环境变量获取密钥(PythonAnywhere可在"Web" > "Virtualenv"中配置环境变量)
SECRET_KEY = base64.b64decode(os.getenv("AES_SECRET_KEY"))

@app.route('/process-sensitive', methods=['POST'])
def process_sensitive_data():
    req_data = request.get_json()
    
    # 解析Bubble传来的加密参数
    ciphertext = base64.b64decode(req_data['ciphertext'])
    iv = base64.b64decode(req_data['iv'])
    tag = base64.b64decode(req_data['tag'])
    
    # AES-GCM解密并验证数据完整性
    try:
        cipher = AES.new(SECRET_KEY, AES.MODE_GCM, nonce=iv)
        plaintext = cipher.decrypt_and_verify(ciphertext, tag)
        sensitive_data = json.loads(plaintext.decode('utf-8'))
        
        # 这里添加你的数据处理逻辑
        print("处理敏感数据:", sensitive_data)
        
        return jsonify({"status": "success"}), 200
    except ValueError:
        # 数据篡改或密钥不匹配时触发
        return jsonify({"status": "error", "msg": "数据验证失败"}), 400

if __name__ == '__main__':
    # 生产环境务必关闭debug并启用HTTPS
    app.run(debug=True)

关键注意事项

  • 密钥安全:绝对不要在代码中硬编码密钥,两端都用环境变量存储。Bubble的环境变量仅后端可访问,避免密钥泄露。
  • 强制HTTPS:Bubble的API调用和Flask应用必须启用HTTPS,防止传输过程中数据被窃听。
  • 后端加密:必须在Bubble的后端工作流中执行加密,不要在前端JS中处理(前端密钥会暴露)。
  • 参数一致性:两端的AES模式(GCM)、密钥长度(256位)、IV长度(12字节)必须完全一致,否则解密失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:35:42