AES-256 CBC file encryption library with support for individual files and directory batch operations.
Project description
brachinus
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file brachinus-1.3.6.tar.gz.
File metadata
- Download URL: brachinus-1.3.6.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e70e66beb0a177bdddc80edd7d734e5138e3dd93b7e5d8a2dcccab82f106e5f
|
|
| MD5 |
fd9bfaf8ca3413c9dd531c7e514440dc
|
|
| BLAKE2b-256 |
35379fa484a2ca97b41e665476c51f97dccbc727ce54dd41d635dd2df6c8796f
|
File details
Details for the file brachinus-1.3.6-py3-none-any.whl.
File metadata
- Download URL: brachinus-1.3.6-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a668a07ec606be6ad5585c482bce4aedc92c2f6a82babaca7b56cc979a459508
|
|
| MD5 |
9c1742b841b11c513d844fe48667ea3b
|
|
| BLAKE2b-256 |
7dc29b52be454ba59c2812609191f0cca407234b3f2a642eb904d61b36346751
|