01 — Criptografe o JSON do payload
Derive a chave como os primeiros 32 caracteres da representação Base64 do SHA-256 do segredo. Converta esses caracteres em bytes UTF-8: não use o hash binário nem decodifique essa Base64.
Gere um IV aleatório novo de 16 bytes para cada nova captura. Criptografe o JSON UTF-8 com AES-256-CBC e padding PKCS#7. O campo payload é o IV hexadecimal, dois-pontos e o conteúdo criptografado hexadecimal.
key = UTF8(first32(Base64(SHA256(secret))))
payload = hex(iv) + ":" + hex(AES_256_CBC_PKCS7(key, iv, jsonPayload))02 — Assine o corpo final
Monte o objeto de captura com payload já criptografado e serialize em JSON uma única vez. A assinatura hexadecimal é o HMAC-SHA256 de timestamp + "." + corpo, usando o segredo como chave. Envie exatamente esses bytes.
signature = hex(HMAC_SHA256(secret, timestamp + "." + body))03 — Preserve a identidade nos reenvios
Mantenha o mesmo eventId e o mesmo corpo completo, inclusive IV e payload criptografado. Atualize apenas o timestamp do header e a assinatura de cada tentativa. Recriptografar muda o corpo e pode causar conflito com o comprovante existente.
Dados sensíveis
A criptografia do payload não substitui HTTPS. error e os campos de fluxo ficam fora do payload criptografado. Remova senhas, tokens e dados desnecessários antes de capturar; o backend precisa descriptografar o payload para os recursos do produto.