Skip to main content

A Python package for code obfuscation using AES and Base64 encryption

Project description

Image

License: MIT Python Version

CodeEnigma is a Python package for lightweight code obfuscation using AES-256 encryption and Base64 encoding. It helps protect your Python code from exposing raw source code while distributing.

🔒 Why CodeEnigma?

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.

High Level Architecture

Image

The working principle of CodeEnigma is simple:

  1. The user provides the path to the Python module to obfuscate.
  2. CodeEnigma reads the module's source code.
  3. An AES-256 key is generated using a secure random number generator and set in private.py
  4. 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:
  5. CodeEnigma creates a new module with the obfuscated code.
  6. A codeenigma_runtime.pyx file is created with the deobfuscation logic to decrypt and execute the obfuscated code.
  7. The runtime is compiled to a Python extension module using Cython. Also generates a codeenigma_runtime.whl file for distribution.
  8. End of process, the obfuscated module is ready to be distributed as wheel files.

Features

  • 🔒 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

Installation

Using Poetry:

poetry add codeenigma

Using pip:

pip install codeenigma

Usage

CodeEnigma comes with a user-friendly command-line interface powered by Typer. The CLI provides helpful prompts and rich output.

Basic Usage

To obfuscate a Python module:

codeenigma obfuscate /path/to/your/module

Command Line Options

  • --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

Examples

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

Version Information

To check the installed version:

codeenigma version

Contributing

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.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Built with ❤️ using Python
  • Uses cryptography for secure encryption
  • Uses Cython for compiling the runtime
  • Logo Credits, Claude 🫡

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

codeenigma-1.0.0.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

codeenigma-1.0.0-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file codeenigma-1.0.0.tar.gz.

File metadata

  • Download URL: codeenigma-1.0.0.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.10.7 Darwin/24.5.0

File hashes

Hashes for codeenigma-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6ac4c1a728c80c9221d87f5af499e096d7772f4d7b987092546ecb2e7e3f6424
MD5 0d71903855ed4cb8fe6701c0d5dbaa8a
BLAKE2b-256 99cb16ef1577208706e221a376451aa27b1e7e5c4a54ef18a6d82a8b1c6e6c64

See more details on using hashes here.

File details

Details for the file codeenigma-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: codeenigma-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.10.7 Darwin/24.5.0

File hashes

Hashes for codeenigma-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f8bfeb86f376f962c97253116abcd325a9d6ff6f7bd26d1cd45f8ae90285fcd0
MD5 bdcaa4c60a1443aa38e4cb85d3a2bef8
BLAKE2b-256 447614e5647d139b1d37a3aab3710dd9ac5b9fe816f18e22911b923f8d53e40e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page