SecretJournalQt is a lightweight, cross‑platform encrypted journal application built with Qt6. It shares the same core functionality and code base as SimpleJournalQt, but adds a robust cryptographic layer to protect all journal entries. The project is designed for users who want a minimal, distraction‑free writing experience while ensuring that their personal notes remain confidential.
🔐 Key Features
- Clean and simple Qt‑based user interface
- Fully compatible with the workflow and features of SimpleJournalQt
- Transparent encryption and decryption of journal files
- Modern cryptographic primitives:
- Twofish (symmetric encryption)
- HMAC (integrity protection)
- PBKDF2 (password‑based key derivation)
- After encryption, the binary ciphertext is encoded using Base64 to ensure safe and consistent file handling across platforms and tools. This avoids issues with raw binary data and makes journal files easier to store, transfer, and inspect when necessary.
🧩 Cryptography Overview SecretJournalQt uses a layered security approach:
- PBKDF2 derives strong keys from user passwords
- Twofish encrypts all journal content
- HMAC ensures that files cannot be tampered with undetected All cryptographic routines are implemented in modern, idiomatic C++ and validated against official test vectors.
- On little‑endian systems (x86, x64, ARM64), files are written in little‑endian format
- On big‑endian systems, files are written in big‑endian format. As a result: ❌ Files are not cross‑endian compatible. A journal created on a little‑endian machine cannot be opened on a big‑endian machine, and vice versa.
Given that the primary target platforms are Windows and macOS - both universally little‑endian - introducing additional complexity for cross‑endian compatibility would provide no practical benefit. For this reason, the current design intentionally avoids extra abstraction layers or conversion logic.
Special thanks to Martin Mitáš (mity) and all contributors to the md4c library.
2026-04-09:
- macOS UI fixes only:
- added splitter handle stylesheets to splitters to reduce handle with
- explicitly set handle width to zero in viewer only mode since hiding the handle completely failed
- applying the unified tool-/statusbar setting for macOS also failed (applied a custom stylesheet to the statusbar to match background color with the toolbar)
