bitsplit turns any file into a binary block and a 128-bit text key. Without the key, the block is useless. Without the block, the key is just a number.
The file is interpreted as a single large number. The top 128 bits become the key, the rest is saved as a binary block. Recovery is a single bitwise operation.
The bytes of any file — JPEG, MP4, ZIP, executable — are interpreted as a single integer.
# number = int.from_bytes(data, "big")
Slice the top 128 bits off the integer. They're stored as a short text key in key.txt.
key_data = number >> count
Everything below those 128 bits is written as raw bytes to data.bin. Same total size as the original.
indices = number & ((1 << count) - 1)
File (bytes) → Number → [ data: 128 bits | indices: the rest ] │ │ key.txt data.bin Recovery: number = (key_data << count) | indices data = number.to_bytes(size, "big")
Pure Python 3.11+, standard library only. No compiled extensions, no platform quirks.
Then run bitsplit encode <file> on any file.
No ciphers means no per-byte processing. bitsplit is competitive with native crypto on small files and pulls ahead on multi-GB inputs.
Benchmarked on Apple M2 with 8 GB RAM. All files restored with identical SHA-256 checksums.
The lower the bar, the faster. bitsplit is highlighted.
A breach of one half is useless without the other. That's the whole product.
Block on the cloud, key on your laptop. Compromising the cloud reveals nothing.
Send the block one way, the key another. Intercepting one channel is useless.
Block on an external SSD. Key written on paper in a safe.
Commit the block. Store the 102-byte key in environment variables.
One person holds the key, another holds the block. Both required to restore.
Block in one region. Key in another. Single-region failure protects both.
bitsplit doesn't pretend to be encryption. Knowing what it is — and isn't — is part of the contract.
No ciphers. No rounds. No key derivation. If you need a cryptographic standard for compliance or audits, use AES or ChaCha20 via gpg or age.
2128 ≈ 3.4 × 1038. Every computer on Earth at 1018 ops/sec would need ~1013 years. The universe is 1.4 × 1010 years old.
There is no randomness in the process. Same input, same output. This is by design — and worth knowing before you use it.
Keep key.txt private. Anyone with both halves can restore the file. Store key and block separately — that's the entire point.