{"id":27425779,"url":"https://github.com/l0g0rhythm/cryptoolsec","last_synced_at":"2026-04-27T20:31:52.246Z","repository":{"id":286716942,"uuid":"956209715","full_name":"L0g0rhythm/Cryptoolsec","owner":"L0g0rhythm","description":"Secure Python CLI \u0026 GUI tool for efficient file/stream encryption \u0026 decryption (AES-256-GCM, streaming I/O). Supports passwords (Argon2id+Salt) or key files. Built for security and automation","archived":false,"fork":false,"pushed_at":"2025-04-11T00:24:00.000Z","size":304,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-13T20:40:16.860Z","etag":null,"topics":["aes","aes-256","aes-gcm","argon2","argon2id","authenticated-encryption","cli","cross-platform","cryptography","decryption","encryption","file-encryption","gui","kdf","pyside6","python","python3","qt6","security","streaming"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/L0g0rhythm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-27T21:56:20.000Z","updated_at":"2025-04-11T00:24:04.000Z","dependencies_parsed_at":"2025-04-13T20:40:18.947Z","dependency_job_id":null,"html_url":"https://github.com/L0g0rhythm/Cryptoolsec","commit_stats":null,"previous_names":["victorvernier/cryptoolsec","l0g0rhythm/cryptoolsec"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/L0g0rhythm%2FCryptoolsec","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/L0g0rhythm%2FCryptoolsec/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/L0g0rhythm%2FCryptoolsec/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/L0g0rhythm%2FCryptoolsec/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/L0g0rhythm","download_url":"https://codeload.github.com/L0g0rhythm/Cryptoolsec/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248880809,"owners_count":21176738,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aes","aes-256","aes-gcm","argon2","argon2id","authenticated-encryption","cli","cross-platform","cryptography","decryption","encryption","file-encryption","gui","kdf","pyside6","python","python3","qt6","security","streaming"],"created_at":"2025-04-14T12:29:00.890Z","updated_at":"2026-04-27T20:31:52.215Z","avatar_url":"https://github.com/L0g0rhythm.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cryptoolsec: Secure CLI \u0026 GUI Encryption Tool\r\n\r\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.html)\r\n[![Python Version](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\r\n![Status](https://img.shields.io/badge/status-pre--release-orange.svg)\r\n![Platforms](https://img.shields.io/badge/platform-windows%20%7C%20linux%20%7C%20macos-lightgrey.svg)\r\n![Framework](https://img.shields.io/badge/Framework-PySide6%2FQt6-success.svg)\r\n\r\n\r\n## 1. Description\r\n\r\n**Cryptoolsec** is a versatile tool providing both a Command-Line Interface (CLI) and a Graphical User Interface (GUI) for strong file and data stream encryption/decryption on Windows, macOS, and Linux.\r\n\r\nIt leverages the robust **AES-256-GCM** authenticated encryption standard, ensuring confidentiality, integrity, and authenticity. For password-based operations, keys are securely derived using **Argon2id** with unique salts per encryption. Alternatively, raw 32-byte AES keys can be used directly via key files.\r\n\r\nThe application is built with Python and PySide6 (for the GUI), featuring streaming I/O for handling large files efficiently and a threaded GUI for a responsive user experience.\r\n\r\n\r\n## 2. Key Features\r\n\r\n* **Dual Interface:** Functional CLI (`cryptoolsec`) and modern GUI (`cryptoolsec-gui`).\r\n* **Strong Encryption:** AES-256-GCM standard.\r\n* **Secure Key Derivation:** Argon2id with unique salts for passwords.\r\n* **Flexible Secret Handling:** Supports interactive passwords, password files, password via stdin, and raw key files.\r\n* **Large File Support:** Uses streaming I/O (chunked processing) for low memory usage.\r\n* **Responsive GUI:** Background threading prevents UI freezing during operations.\r\n* **GUI Enhancements:** Progress bar, status messages, platform icon, intelligent output filename suggestion, automatic field clearing.\r\n* **Cross-Platform:** Python codebase designed for Windows, macOS, and Linux. Packaged builds available (starting with Windows).\r\n\r\n\r\n## 3. Index\r\n\r\n* [1. Description](#1-description)\r\n* [2. Key Features](#2-key-features)\r\n* [3. Index](#3-index)\r\n* [4. Installation](#4-installation)\r\n* [5. Usage](#5-usage)\r\n    * [5.1. Launching](#51-launching)\r\n    * [5.2. CLI Usage](#52-cli-usage)\r\n        * [5.2.1. General Syntax](#521-general-syntax)\r\n        * [5.2.2. Commands](#522-commands)\r\n        * [5.2.3. Common Options](#523-common-options)\r\n        * [5.2.4. Secret Options](#524-secret-options)\r\n        * [5.2.5. CLI Examples](#525-cli-examples)\r\n    * [5.3. GUI Usage](#53-gui-usage)\r\n* [6. File Format](#6-file-format)\r\n* [7. Technologies Used](#7-technologies-used)\r\n* [8. License](#8-license)\r\n* [9. Project Status](#9-project-status)\r\n* [10. Contribution](#10-contribution)\r\n* [11. Contact](#11-contact)\r\n\r\n\r\n## 4. Installation\r\n\r\n1.  **Prerequisites:**\r\n    * Python (\u003e= 3.10 recommended, as specified in `pyproject.toml`).\r\n    * `pip` (Python package installer).\r\n\r\n2.  **Clone or Download:**\r\n    * Obtain the project source code.\r\n    ```bash\r\n    # Example using Git\r\n    git clone https://github.com/victorvernier/Cryptoolsec.git\r\n    # cd Cryptoolsec\r\n    ```\r\n\r\n3.  **Create \u0026 Activate Virtual Environment (Recommended):**\r\n    * Navigate to the project root directory in your terminal.\r\n    ```bash\r\n    # Create venv\r\n    python -m venv .venv\r\n    # Activate venv\r\n    # Windows: .\\.venv\\Scripts\\activate\r\n    # Linux/macOS: source .venv/bin/activate\r\n    ```\r\n\r\n4.  **Install Project and Dependencies:**\r\n    * With the virtual environment activated, install `Cryptoolsec` and its dependencies using `pip` and the `pyproject.toml` file. Using the editable (`-e`) flag is recommended for development.\r\n    ```bash\r\n    # Installs dependencies and creates the 'cryptoolsec' and 'cryptoolsec-gui' commands\r\n    pip install -e .\r\n    ```\r\n    * This command reads `pyproject.toml`, installs the packages listed under `dependencies` (`PySide6`, `pycryptodome`, `argon2-cffi`), and makes the entry points available.\r\n\r\n\r\n## 5. Usage\r\n\r\n### 5.1. Launching\r\n\r\nAfter installation (`pip install -e .`), the following commands become available in your terminal (while the virtual environment is active):\r\n\r\n* **Launch GUI:**\r\n    ```bash\r\n    cryptoolsec-gui\r\n    ```\r\n* **Use CLI:**\r\n    ```bash\r\n    cryptoolsec \u003ccommand\u003e [options...]\r\n    ```\r\n\r\n### 5.2. CLI Usage\r\n\r\n\r\n#### 5.2.1. General Syntax\r\n\r\n```bash\r\ncryptoolsec \u003ccommand\u003e [options...]\r\n```\r\n\r\n\r\n#### 5.2.2. Commands\r\n\r\n* `encrypt`: Encrypt input file/stream to output file/stream.\r\n* `decrypt`: Decrypt input file/stream to output file/stream.\r\n\r\n\r\n#### 5.2.3. Common Options\r\n\r\n* `-i FILE`, `--input FILE`: Input file path. Reads from stdin if omitted.\r\n* `-o FILE`, `--output FILE`: Output file path. Writes to stdout if omitted.\r\n* `--verbose`: Show detailed debug messages.\r\n* `-q`, `--quiet`: Show only error messages.\r\n* `-V`, `--version`: Show program version.\r\n* `-h`, `--help`: Show help message (use after command for specific help, e.g., `cryptoolsec encrypt -h`).\r\n\r\n\r\n#### 5.2.4. Secret Options\r\n\r\nOne of these mutually exclusive options is required for both `encrypt` and `decrypt`:\r\n\r\n* `--password-interactive`: Securely prompts for password entry.\r\n* `--password-file FILE`: Reads password from the first line of `FILE`.\r\n* `--password-stdin`: Reads password from the first line of stdin (for piping).\r\n* `--keyfile FILE`: Uses the raw 32-byte AES key from `FILE`.\r\n\r\n\r\n#### 5.2.5. CLI Examples\r\n\r\n* Encrypt `doc.txt` to `doc.enc` using interactive password:\r\n```bash\r\ncryptoolsec encrypt -i doc.txt -o doc.enc --password-interactive\r\n```\r\n\r\n* Decrypt `pic.jpg.enc` to `pic.jpg` using password from `key.txt`:\r\n```bash\r\ncryptoolsec decrypt -i pic.jpg.enc -o pic.jpg --password-file key.txt\r\n```\r\n\r\n* Encrypt large `archive.zip` using `secret.key` file, show verbose logs:\r\n```bash\r\ncryptoolsec --verbose encrypt --keyfile secret.key -i archive.zip -o archive.zip.enc\r\n```\r\n\r\n* Compress, encrypt, and upload a folder using pipes:\r\n```bash\r\ntar czf - /my/folder | cryptoolsec encrypt --keyfile secret.key \u003e backup.tar.gz.enc\r\n# (Upload backup.tar.gz.enc)\r\n```\r\n\r\n* Download, decrypt, and extract using pipes:\r\n```bash\r\n# (Download backup.tar.gz.enc first)\r\ncat backup.tar.gz.enc | cryptoolsec decrypt --keyfile secret.key | tar xzf - -C /restore/here\r\n```\r\n\r\n\r\n## 5.3. GUI Usage\r\n\r\n1. **Launch:** Run `cryptoolsec-gui` in your terminal (after installation and with venv active).\r\n\r\n2. **Select Files:** Use the \"Select...\" buttons to choose your Input File and define your Output File path. The output filename will be suggested automatically based on the input file (adding/removing `.enc`).\r\n\r\n3. ** Secret Method:** Select either \"Use Password\" or \"Use Key File\".\r\n\r\n4. **Enter Secret:**\r\n    * If \"Use Password\", type the password in both fields (input is masked).\r\n    * If \"Use Key File\", click \"Select Key File...\" and choose your raw 32-byte key file.\r\n\r\n5. **Click Action:** Click \"Encrypt\" or \"Decrypt\".\r\n\r\n6. **Monitor:** The UI will disable, and the progress bar will show activity (it might be indeterminate if reading from stdin, not yet implemented in GUI). A success or error message will appear upon completion.\r\n\r\n7. **Repeat:** Input fields will clear automatically after the operation finishes.\r\n\r\n![Cryptoolsec GUI Screenshot](docs/img/screenshot.png)\r\n\r\n\r\n## 6. File Format\r\n\r\nThe encrypted output (`.enc` file) format depends on the secret method used:\r\n\r\n* Password Mode: `[16-byte Salt][12-byte IV][Ciphertext][16-byte GCM Tag]`\r\n\r\n* Key File Mode: `[12-byte IV][Ciphertext][16-byte GCM Tag]` (No Salt is stored as none was needed for key derivation)\r\n\r\n\r\n## 7. Technologies Used\r\n\r\n* Python (\u003e= 3.10)\r\n* PySide6 (for the GUI)\r\n* pycryptodome (for AES-GCM implementation)\r\n* argon2-cffi (for Argon2id key derivation)\r\n* PyInstaller (for packaging)\r\n\r\n\r\n## 8. License\r\n\r\nDistributed under the GPL-3.0 license. See LICENSE file or [LICENSE](https://github.com/l0g0rhythm/Cryptoolsec/blob/main/LICENSE) for more information.\r\n\r\n\r\n## 9. Project Status\r\n\r\n**v0.2.0 - Beta / Pre-release:** Core functionality for both CLI and GUI is implemented. Successfully passed initial manual tests and a core suite of automated end-to-end CLI tests covering main encryption/decryption workflows (password file, keyfile) and common error conditions (wrong password, file not found). Comprehensive automated test coverage (more CLI scenarios, unit tests, GUI tests) is pending. **Not recommended for production use with critical data until further testing.**\r\n\r\n\r\n## 10. Contribution\r\nContributions, bug reports, and feature requests are welcome! Please open an [issues](https://github.com/l0g0rhythm/Cryptoolsec/issues) to discuss changes or report problems.\r\n\r\n\r\n## 11. Contact\r\n\r\nVictor Oliveira (L0g0rhythm) - Connect via the links on the profile site: [l0g0rhythm.github.io](https://l0g0rhythm.github.io/)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fl0g0rhythm%2Fcryptoolsec","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fl0g0rhythm%2Fcryptoolsec","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fl0g0rhythm%2Fcryptoolsec/lists"}