Skip to main content

AES-256 CBC file encryption library with support for individual files and directory batch operations.

Project description

brachinus

PyPI - Downloads PyPI - License GitHub Tag PyPI - Version

AES-256 CBC file encryption library with support for individual files and directory batch operations.

Supports single-file and directory batch operations + command-line usage

Brachinus is a simple, secure, and feature-rich AES-256 encryption library for Python.
It supports password-based key derivation, random binary keys, file/directory encryption, and includes a built-in CLI interface.


Features

  • AES-256 encryption (CBC mode)
  • PBKDF2 key derivation (100k iterations)
  • Automatic IV generation
  • Salt + IV metadata stored in output file
  • File and directory encryption/decryption
  • Optional extension filtering
  • Filename encryption/decryption
  • Directory name encryption/decryption
  • In-place or backup mode operations
  • Real-time progress bar in CLI
  • Key saving/loading utilities
  • Built-in command-line interface (CLI)

Installation

Install:

pip install brachinus

Or install from source:

git clone https://github.com/JuanBindez/brachinus
cd brachinus
pip install .

Quick Start (Python API)

Using the AES256 Class Directly

With a password

from brachinus import AES256

PASS_WORD = "password123"

crypt = AES256(password=PASS_WORD)
crypt.encrypt_file(
    file_path="file.txt",
    encrypt_filename=True
)

crypt.decrypt_file("file.txt.enc")

With a random binary key

aes = AES256()
print(aes.key)

Key save/load

aes.save_key("aes.key")
loaded = AES256.load_from_keyfile("aes.key")

Directory Encryption

Basic directory encryption (in-place)

All files are encrypted in the same directory, original files are removed.

Backup mode (creates new directory)

aes.encrypt_directory("myfolder", backup=True)

Produces:

myfolder_encrypted/

Encrypt filenames

aes.encrypt_directory("myfolder", encrypt_filenames=True, backup=False)

Encrypt directory names

aes.encrypt_directory("myfolder", encrypt_dirnames=True, recursive=True, backup=False)

Encrypt only specific extensions

aes.encrypt_directory("photos", extensions=[".jpg", ".png"], backup=False)

Complete example with all options

aes.encrypt_directory(
    directory_path="myfolder",
    extensions=[".txt", ".pdf"],
    encrypt_filenames=True,
    encrypt_dirnames=True,
    recursive=True,
    backup=False
)

Directory Decryption

Basic directory decryption (in-place)

aes.decrypt_directory("myfolder", backup=False)

Backup mode (creates new directory)

aes.decrypt_directory("myfolder_encrypted", backup=True)

Creates:

myfolder_encrypted_decrypted/

Decrypt filenames

aes.decrypt_directory("myfolder", decrypt_filenames=True, backup=False)

Decrypt directory names

aes.decrypt_directory("myfolder", decrypt_dirnames=True, recursive=True, backup=False)

Complete example with all options

aes.decrypt_directory(
    directory_path="myfolder_encrypted",
    decrypt_filenames=True,
    decrypt_dirnames=True,
    recursive=True,
    backup=False
)

Key Information

info = aes.get_key_info()
print(info)

Example:

{
    "key": "...",
    "key_hex": "a4f5...",
    "salt": "...",
    "salt_hex": "d2ab...",
    "key_type": "password-derived"
}

Internal Encrypted File Format

[4 bytes salt_length] [salt (if present)] [16-byte IV] [encrypted_data]

  • Salt only stored for password-derived keys
  • IV always present
  • Ensures reproducible decryption

Command Line Interface (CLI)

Brachinus includes a terminal command: brachinus

After installation you can run:

brachinus -h

CLI Commands

File Operations

Encrypt a file (optional --encryptfilename)

brachinus -ef input.txt --encryptfilename

Decrypt a file

brachinus -df input.txt.enc

Directory Operations (Basic)

Encrypt a directory (in-place)

brachinus -ed myfolder

Decrypt a directory (in-place)

brachinus -dd myfolder

Directory Operations with Filename Encryption

Encrypt with filename obfuscation

brachinus -ed myfolder --encryptfilename

Decrypt with filename restoration

brachinus -dd myfolder --decryptfilename

Directory Operations with Directory Name Encryption

Encrypt directory names

brachinus -ed myfolder -r --encryptfilename --encryptdirname

Decrypt directory names

brachinus -dd myfolder -r --decryptfilename --decryptdirname

Backup Mode (creates new directories)

Encrypt to backup directory

brachinus -ed myfolder --backup

Decrypt from backup directory

brachinus -dd myfolder_encrypted --backup

Encrypt with backup and name obfuscation

brachinus -ed myfolder -r --encryptfilename --encryptdirname --backup

Extension Filtering

Encrypt only specific file types

brachinus -ed myfolder -r -e .txt -e .pdf --encryptfilename

Recursive Processing

Process subdirectories

brachinus -ed myfolder -r --encryptfilename

Using Keyfile

Encrypt with binary key file

brachinus -ef document.pdf --keyfile aes.key

Decrypt with binary key file

brachinus -df document.pdf.enc --keyfile aes.key

Complete Examples

Encrypt data/ directory including subfolders, obfuscate filenames and directory names (in-place):

brachinus -ed data/ -r --encryptfilename --encryptdirname

Decrypt directory, restoring original structure, filenames and directory names (in-place):

brachinus -dd data/ -r --decryptfilename --decryptdirname

Backup mode with full obfuscation:

brachinus -ed data/ -r --encryptfilename --encryptdirname --backup

Filter by extension with real-time progress:

brachinus -ed photos/ -r -e .jpg -e .png --encryptfilename

Key Management

Generate and save a random key

brachinus -sk mykey.bin

Load and display key information

brachinus -lk mykey.bin -v

Display current key information

brachinus -ki

CLI Options Reference

Option Description
-ef, --encryptfile Encrypt a single file
-df, --decryptfile Decrypt a single file
-ed, --encryptdir Encrypt all files in a directory
-dd, --decryptdir Decrypt all .enc files in a directory
-o, --output Output file/directory path
-k, --keyfile Path to binary key file
-r, --recursive Process directories recursively
--encryptfilename Encrypt filenames
--decryptfilename Decrypt encrypted filenames
--encryptdirname Encrypt directory names
--decryptdirname Decrypt encrypted directory names
--backup Create backup directories instead of in-place
-e, --extension Only encrypt files with specific extensions
-v, --verbose Verbose output
-ki, --keyinfo Display key information
-sk, --savekey Save binary AES key to a file
-lk, --loadkey Load key and print info

Security Notes

⚠️ Use strong passwords
⚠️ Never reuse password + salt manually
⚠️ Keep .key files secure
⚠️ Lost passwords or keys cannot be recovered
⚠️ In-place mode (backup=False) permanently replaces original files
⚠️ Always test with non-critical data first


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

brachinus-1.3.5.tar.gz (20.0 kB view details)

Uploaded Source

Built Distribution

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

brachinus-1.3.5-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file brachinus-1.3.5.tar.gz.

File metadata

  • Download URL: brachinus-1.3.5.tar.gz
  • Upload date:
  • Size: 20.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for brachinus-1.3.5.tar.gz
Algorithm Hash digest
SHA256 4fe6e1a9d6b9e55b18acdf378e0f59fe7623523aeaefd1dc21c3ecccf56b40d8
MD5 1b526a822451db5bc96a7579daacefc1
BLAKE2b-256 9d8792b860bd58047491c1f151091c9c44b39adbe7ff98ef1bee0b01a81a0e54

See more details on using hashes here.

File details

Details for the file brachinus-1.3.5-py3-none-any.whl.

File metadata

  • Download URL: brachinus-1.3.5-py3-none-any.whl
  • Upload date:
  • Size: 18.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for brachinus-1.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 58b3b94e8eb47fdfbd2d000bec5d5358c476fc81c84fde1cc0d036be10f0016a
MD5 59103b821e5528a284fca95220cd60e6
BLAKE2b-256 0f15f85839ded0f796b1f46678d7c8a55dc050007eb4f38f5a369d0fe33e177b

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