A small Tkinter desktop app that splits a file into chunks, merges them back, checksums them, and encrypts or decrypts a file with PGP — all from one window.
I kept ending up with the same three terminal commands whenever I had to move a
large file somewhere with an upload size limit: split it, sha256sum every
part so I could tell whether the transfer was clean, and gpg the result. This
wraps that routine in a GUI so it is one click each, and so it works the same way
on a machine where I do not want to explain split -b to someone.
- Split the selected file into 1 MB parts under
divided_files/, nameddivided_part_000,divided_part_001, … - Merge those parts back into
merged_files/, restoring the original file extension - Hash either every split part or a single file you pick, printing MD5, SHA256 and SHA512 side by side
- PGP encrypt to a recipient email using a key from your local keyring
- PGP decrypt with a passphrase
- Delete all outputs — one button that clears every folder and file the app created
- Every action logs what it did to a scrollable pane, so you can see which parts were written before something failed
Python 3, Tkinter (standard library), python-gnupg on top of a system GnuPG 2.x install.
You need GnuPG installed and a keyring at ~/.gnupg for the PGP buttons; split,
merge and hash work without it.
git clone https://github.com/ElbruzMafe/SplitnCrypt.git
cd SplitnCrypt
pip install -r requirements.txt
python SplitnCrypt.pyOn Debian/Ubuntu, Tkinter and GnuPG come from the system packages:
sudo apt install python3-tk gnupgTypical run: pick an input file with Select, hit Split File, then Hash and choose option 1 to fingerprint each part. To encrypt, type the recipient's email (it must match a public key in your keyring) and press PGP Encrypt.
.
├── SplitnCrypt.py # GUI plus all split/merge/hash/PGP logic
└── requirements.txt
It is a single file on purpose — about 250 lines, no packaging, so you can read the whole thing before running something that touches your keyring.
- Chunk size is fixed at 1 MB in the source; it is not exposed in the UI yet.
- Output paths are relative to whatever directory you launched the app from, and
the PGP output names are fixed (
pgp_encrypted.<ext>/pgp_decrypted.<ext>), so only one encrypted file can exist at a time. - Decrypt derives the extension from the file currently in the Input File box, so you have to leave the original selected for the names to line up.
- Long operations run on the Tk main thread, so the window freezes on large files and there is no progress bar.
- The passphrase lives in a plain
StringVarfor the lifetime of the window. - Merge trusts the part filenames rather than verifying hashes, so it will happily produce a truncated file if a part is missing from the middle. Comparing the hash of the merged file against the original is still a manual step.