跳转到内容

端到端加密 (E2EE)

PushGo 支持 端到端加密 (E2EE),确保只有你的设备能够读取通知内容。网关仅负责透传加密后的数据块,无法解析明文。

PushGo 采用工业级的 AES-256-GCM 标准进行数据加密与身份认证。

组件规格
算法AES-GCM (Galois/Counter Mode)
密钥长度256 位 (32 字节)
Nonce (IV) 长度12 字节
认证标签 (Auth Tag)16 字节

解密后的明文必须是一个合法的 JSON 对象。

{
"title": "通知标题",
"body": "加密的正文内容",
"images": ["https://example.com/img1.jpg"]
}

要为 API 生成 ciphertext 字段,请遵循以下步骤:

  1. 加密:使用你的秘钥和随机生成的 12 字节 Nonce 对 UTF-8 编码的 JSON 字符串进行加密。
  2. 拼接:将 认证标签 (Auth Tag)Nonce 依次附加在原始密文的末尾。
    • 最终数据 = 原始密文 + 认证标签 + Nonce
  3. 编码:将拼接后的二进制数据转换为 Base64 字符串。
[ 原始密文 (N 字节) ] [ 认证标签 (16 字节) ] [ Nonce/IV (12 字节) ]

import base64
import json
import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
def encrypt_payload(key_hex, payload_dict):
key = bytes.fromhex(key_hex)
aesgcm = AESGCM(key)
nonce = os.urandom(12)
plaintext = json.dumps(payload_dict).encode('utf-8')
# AESGCM.encrypt 返回密文 + 标签 (ciphertext + tag)
cipher_and_tag = aesgcm.encrypt(nonce, plaintext, None)
# 拼接布局: (密文 + 标签) + nonce
final_blob = cipher_and_tag + nonce
return base64.b64encode(final_blob).decode('utf-8')
# 使用方法
payload = {"title": "你好", "body": "这是一条加密消息"}
key_hex = "你的32字节十六进制密钥..."
print(encrypt_payload(key_hex, payload))

将生成的 Base64 字符串填入 /message 接口的 ciphertext 字段。客户端 App 会自动检测到该字段,并尝试使用本地存储的密钥进行解密。