A lightweight, open-source tool for Python code obfuscation. CodeEnigma helps protect your logic from reverse engineering and unauthorized access, making it secure to distribute your Python applications.
After searching extensively for a free and open-source Python obfuscation tool, I realized that most available options were either paid, closed-source, or opaque in how they worked. I wasn't comfortable letting a black-box tool encrypt my production code without knowing exactly what it was doing — especially when it had access to sensitive logic.
So I built CodeEnigma — a transparent, self-contained solution that gives you full control over the obfuscation process, with no hidden logic and no external servers involved.
This project is inspired by PyArmor but with a different approach.
The working principle of CodeEnigma is simple:
- The user provides the path to the Python module to obfuscate.
- CodeEnigma reads the module's source code.
- An AES-256 key is generated using a secure random number generator and set in
private.py
- Obfuscation runs file by file running the following steps:
- 4.1. Compile using
compile(code, str(file_path), "exec")
- 4.2. Compress the byte code using
zlib.compress(compiled_code)
- 4.3. Encode the compressed byte code using
base64.b64encode(compressed_code)
- 4.4. Encrypt the encoded byte code using
AESGCM(SECRET_KEY).encrypt(NONCE, obfuscated, associated_data=None)
refer for more details:
- 4.1. Compile using
- CodeEnigma creates a new module with the obfuscated code.
- A codeenigma_runtime.pyx file is created with the deobfuscation logic to decrypt and execute the obfuscated code.
- The runtime is compiled to a Python extension module using Cython. Also generates a codeenigma_runtime.whl file for distribution.
- End of process, the obfuscated module is ready to be distributed as wheel files.
- 🔒 Strong encryption using AES-256
- 🔄 Simple API for obfuscating any python module
- 🔑 Secure and dynamic key generation
- 🛠️ Command-line interface for easy integration into build processes
- 📦 Lightweight and dependency-minimal
Using Poetry:
poetry add codeenigma
Using pip:
pip install codeenigma
CodeEnigma comes with a user-friendly command-line interface powered by Typer. The CLI provides helpful prompts and rich output.
To obfuscate a Python module:
codeenigma obfuscate /path/to/your/module
--expiration
,-e
: Set an expiration date for the obfuscated code (YYYY-MM-DD)--output
,-o
,--dist
: Specify output directory (default: 'dist')--verbose
,-v
: Show detailed output
Obfuscate with an expiration date:
The following example will obfuscate the module and set the expiration date to December 31, 2025, at 23:59:59+0530 (IST).
codeenigma obfuscate /path/to/your/module -e "2025-12-31 23:59:59+0530"
Specify custom output directory:
codeenigma obfuscate /path/to/your/module -o custom_output
To check the installed version:
codeenigma version
Contributions are welcome! This is a complete free and open-source project. If you have any suggestions or find any bugs, please open an issue.
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with ❤️ using Python
- Uses cryptography for secure encryption
- Uses Cython for compiling the runtime
- Logo Credits, Claude 🫡