端到端加密 (E2EE)
PushGo 支持 端到端加密 (E2EE),确保只有你的设备能够读取通知内容。网关仅负责透传加密后的数据块,无法解析明文。
PushGo 采用工业级的 AES-256-GCM 标准进行数据加密与身份认证。
| 组件 | 规格 |
|---|---|
| 算法 | AES-GCM (Galois/Counter Mode) |
| 密钥长度 | 256 位 (32 字节) |
| Nonce (IV) 长度 | 12 字节 |
| 认证标签 (Auth Tag) | 16 字节 |
1. 载荷结构 (Payload)
Section titled “1. 载荷结构 (Payload)”解密后的明文必须是一个合法的 JSON 对象。
{ "title": "通知标题", "body": "加密的正文内容", "images": ["https://example.com/img1.jpg"]}2. 构造 ciphertext 字段
Section titled “2. 构造 ciphertext 字段”要为 API 生成 ciphertext 字段,请遵循以下步骤:
- 加密:使用你的秘钥和随机生成的 12 字节 Nonce 对 UTF-8 编码的 JSON 字符串进行加密。
- 拼接:将 认证标签 (Auth Tag) 和 Nonce 依次附加在原始密文的末尾。
最终数据 = 原始密文 + 认证标签 + Nonce
- 编码:将拼接后的二进制数据转换为 Base64 字符串。
[ 原始密文 (N 字节) ] [ 认证标签 (16 字节) ] [ Nonce/IV (12 字节) ]3. 实现示例 (Python)
Section titled “3. 实现示例 (Python)”import base64import jsonimport osfrom 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))4. 在 API 中使用
Section titled “4. 在 API 中使用”将生成的 Base64 字符串填入 /message 接口的 ciphertext 字段。客户端 App 会自动检测到该字段,并尝试使用本地存储的密钥进行解密。