Chiffrer le code
protect et run, l'expiration, et les cinq niveaux de protection — des artefacts sans clé librement distribuables jusqu'au coffre à deux facteurs verrouillé sur la machine.
magiclock protect transforme un fichier .py en .pya — un conteneur chiffré et verrouillé — sans compilateur et sans jamais téléverser votre source où que ce soit. magiclock run l'exécute.
Utilisation de base
# First run: signs you in and activates this machine, then encrypts.
# Every encrypt after that is instant and non-interactive.
magiclock protect app.py # -> app.pya
magiclock run app.pya
# Point at a directory to protect a whole project tree recursively
# (.venv/venv/__pycache__/.git/dist/build are skipped automatically).
magiclock protect src/Les fichiers .pya sont des fichiers ordinaires que vous pouvez committer, copier ou livrer par les canaux que vous utilisez déjà pour distribuer votre application — le chiffrement voyage avec le fichier. Par défaut, l'artefact est portable et sans clé : il se déchiffre de façon transparente sur toute machine où magiclock est installé, sans compte, sans phrase secrète et sans verrouillage machine côté exécution. Le niveau par défaut relève donc de la commodité/obfuscation — votre source n'est pas livrée en clair, mais quiconque possède le fichier et le runtime peut l'exécuter. Quand vous avez besoin d'un vrai contrôle d'accès, choisissez un niveau plus fort ci-dessous.
Choisir un niveau de protection
| Niveau | Options | Qui peut déchiffrer |
|---|---|---|
| Portable sans clé (par défaut) | (aucune) | Quiconque a magiclock installé — de l'ordre de la commodité/obfuscation. |
| Portable à phrase secrète | --passphrase | Quiconque connaît la phrase secrète, sur n'importe quelle machine. |
| Portable à clé | --emit-key | Quiconque détient la clé générée, sur n'importe quelle machine. |
| Verrouillé machine | --bind-machine | Uniquement cette machine activée — une clé machine non exportable plus la barrière de licence ; le niveau à facteur unique le plus fort. |
| Machine + phrase secrète | --bind-machine --passphrase | Cette machine activée et la phrase secrète — deux facteurs. |
Comment ça fonctionne
Un .pya est un petit conteneur versionné enveloppant une enveloppe chiffrée. magiclock run app.pya le déchiffre en mémoire, installe un hook d'import pour tout ce qu'il importe, puis l'exécute — rien n'est jamais réécrit sur disque en clair. Comme le bytecode marshalé qu'il contient est lié à la version de CPython qui l'a chiffré, un .pya produit sur Python 3.12 ne se chargera pas sur 3.13 ; relancez protect après avoir mis à niveau votre interpréteur.
Supprimer le fichier en clair
magiclock protect app.py --remove # encrypt, then delete app.pyExpiration : artefacts à durée limitée et à autodestruction
Ces options inscrivent une expiration dans l'artefact chiffré lui-même — indépendamment de votre licence — après laquelle il refuse de se déchiffrer :
magiclock protect app.py --expires-in 30d # stops decrypting in 30 days
magiclock protect app.py --expires-at 2026-12-31 # stops decrypting on a date
magiclock protect app.py --trial # fixed 48-hour self-destruct — for demos and evaluations--trial, --expires-in et --expires-at sont mutuellement exclusifs — choisissez-en un par fichier.
Portable avec un secret : phrase secrète ou clé
Le niveau par défaut, sans clé, ne demande rien à qui exécute l'artefact. Pour conserver la portabilité tout en ajoutant un secret d'accès, choisissez l'un des deux modes portables :
# Passphrase-protected, still runs on any machine:
magiclock protect app.py --passphrase
magiclock run app.pya --passphrase
# Or hand out a generated key instead of a passphrase:
magiclock protect app.py --emit-key
magiclock run app.pya --key <the-printed-key>--passphrase et --emit-key sont mutuellement exclusifs — choisissez un seul secret par artefact.
Le plus fort : verrouillage machine (--bind-machine)
Lorsque l'artefact ne doit absolument pas quitter vos machines, liez-le à cette machine activée — le déchiffrement exige alors la clé de coffre non exportable de cette machine et passe la barrière de licence, et le fichier est inutilisable partout ailleurs :
magiclock protect app.py --bind-machine
magiclock run app.pya # only works on the machine that encrypted itAjoutez une phrase secrète par-dessus pour un verrou à deux facteurs — la bonne machine et un secret :
magiclock protect app.py --bind-machine --passphrase
# prompts for a passphrase (or reads $MAGICLOCK_PASSPHRASE non-interactively)
magiclock run app.pya --passphrase--emit-key est réservé au portable et mutuellement exclusif avec --bind-machine — la clé d'un artefact verrouillé machine ne quitte jamais la machine, il n'y a donc rien à distribuer.
Pour la CI et les exécutions scriptées, la phrase secrète comme la clé portable peuvent venir de l'environnement plutôt que d'une invite :
export MAGICLOCK_PASSPHRASE=... # for --passphrase artifacts (portable or two-factor)
export MAGICLOCK_DECRYPT_KEY=... # alternative to `run --key` for --emit-key artifacts
magiclock run app.pyaLa suite
- Chiffrer les modèles et ressources applique les mêmes options d'expiration et de niveau de protection aux actifs non-code.
- Compte et activation couvre ce qui se passe hors ligne, ou lorsqu'un appareil est révoqué.
- Référence CLI liste toutes les options de
protectetrunau même endroit.