Chiffrer / Déchiffrer
Référence du mode serveur, où la donnée en clair transite par MAFATE pour y être chiffrée, et de l’empreinte déterministe qui rend un champ cherchable.
Ces deux points de terminaison sont refusés par défaut
Tout locataire créé depuis le 11/08/2026 porte envelope_only = true : /v1/encrypt et /v1/decrypt répondent 403 E_ENVELOPE_ONLY, et le refus est journalisé. Ce n’est pas une dépréciation, le mode serveur reste légitime pour un service qui ne peut pas exécuter de cryptographie côté client, mais il s’ouvre sur demande auprès du support.
/v1/encryptChiffre une donnée texte avec la clé spécifiée. Retourne un ciphertext à stocker dans votre base de données.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
| plaintext | string | Oui | Donnée à chiffrer (max 64 KB) |
| key_id | string | Oui | UUID de la clé, rendu par POST /v1/keys. Jamais son nom. |
curl -s -X POST https://api.mafate.io/v1/encrypt \
-H "Authorization: Bearer $MAFATE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"plaintext": "Jean Dupont",
"key_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}'
# Reponse 200
{
"ciphertext": "AQIDAHj8mK2z4vNpqRs7LmXoWtU1a9BcDE...",
"wrapped_key": "CiQAe3kL9vXmPqR...",
"iv": "9xK2mQ7bTfR1cVwE",
"key_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"key_version": 2
}
# Reponse 403 sur un locataire en mode enveloppe, c'est-a-dire par defaut
{
"type": "about:blank",
"title": "Forbidden",
"status": 403,
"detail": "E_ENVELOPE_ONLY: ce locataire est en mode enveloppe, ou la donnee en clair ne transite jamais par MAFATE..."
}/v1/decryptDéchiffre un ciphertext. Nécessite le key_id et le key_version stockés avec le ciphertext.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
| ciphertext | string | Oui | Le ciphertext retourné par /encrypt |
| key_id | string | Oui | Identifiant de la clé (stocké avec le ciphertext) |
| key_version | integer | Oui | Version de la clé (stockée avec le ciphertext) |
curl -s -X POST https://api.mafate.io/v1/decrypt \
-H "Authorization: Bearer $MAFATE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ciphertext": "AQIDAHj8mK2z4vNpqRs7LmXoWtU1a9BcDE...",
"wrapped_key": "CiQAe3kL9vXmPqR...",
"iv": "9xK2mQ7bTfR1cVwE",
"key_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"key_version": 2
}'
# Reponse 200. Elle ne porte QUE le clair.
{
"plaintext": "Jean Dupont"
}
# 422 Decryption Failed si le chiffre a ete altere ou la cle ne correspond pas./v1/hashOuvert dans les deux modesCalcule une empreinte déterministe liée à la clé, pour rendre un champ chiffré cherchable sans le déchiffrer. C’est le seul point de terminaison qui reçoit du clair sur un compte en mode enveloppe, et il est resté ouvert délibérément : le bloquer casserait le motif de recherche enseigné par les guides.
Permission requise : encrypt. Une clé désactivée fait échouer l’appel en 409.
# ⚠️ CET APPEL TRANSMET LE CLAIR A MAFATE, DANS LES DEUX MODES.
#
# C'est le seul, et il est ouvert meme en mode enveloppe : le bloquer casserait
# le motif de recherche que la documentation enseigne. Mais votre analyse
# d'impact doit le mentionner, et vous ne devez y passer que le champ que vous
# avez besoin de chercher.
curl -s -X POST https://api.mafate.io/v1/hash \
-H "Authorization: Bearer $MAFATE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"value": "[email protected]",
"key_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}'
# Reponse 200
{
"hash": "a3f2b1c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f80",
"key_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
# Le hachage est DETERMINISTE et lie a la cle : la meme valeur rend toujours la
# meme empreinte, ce qui la rend indexable. C'est aussi ce qui la rend
# vulnerable a une attaque par dictionnaire si votre base fuit : n'y passez pas
# un champ a faible entropie comme une date de naissance ou un code postal.
#
# ⚠️ Une rotation de la cle NE CHANGE PAS les empreintes deja calculees, mais
# une cle desactivee fait echouer l'appel (409 Conflict) : prevoyez la
# reindexation avant de detruire une cle qui sert au hachage.