Il mio primo programma
Il primo programma vero che ho scritto si chiamava Strongchest. Avevo 15 anni, era il lockdown del 2020, e avevo taaaanto tempo libero.
Cos’è
Strongchest è un’applicazione desktop Windows per creare e gestire cartelle cifrate. Scritta interamente in VB.NET (non giudicatemi…).
Il motivo per cui ho iniziato questo progetto non lo ricordo proprio, però volevo programmare un progetto “serio”. Guardavo tantissimi tutorial su Visual Basic .NET, senza ancora sapere niente sulla programmazione. Tipi, array, funzioni, scope: non avevo idea di cosa fossero.
La prima versione che scrissi era PIENA di GOTO. Successivamente capii, alla 50ª etichetta, che questo approccio forse non era il migliore.
Nonostante VB.NET non fosse così all’avanguardia, aveva diversi vantaggi:
- Era facilissimo. E l’autocompletamento di Visual Studio (non Code, quello vero) sembrava “magico”.
- Aveva un designer drag-and-drop per costruire l’interfaccia.
- Forniva tantissimi strumenti integrati: My.Settings (per salvare i dati dell’utente), My.Resources (per gli asset), My.Computer (API per qualsiasi cosa).
Credo che io, ma anche tanti altri, abbiamo nostalgia di Visual Basic .NET, perché ci ha permesso di imparare a programmare con una semplicità disarmante.
Come funziona
Il flusso è semplice:
- All’utente viene proposto di creare uno spazio, inserendo una password.
- La cartella viene creata nella directory
AppDatadell’utente. - Si apre un’interfaccia dove l’utente può fare drag-and-drop e aggiungere file e cartelle.
- Tutto si cifra all’aggiunta dei file, e con un doppio click un file si decifra e si apre con il programma predefinito.
Funzionalità
- Archiviazione, gestione e apertura di file e cartelle.
- Crittografia AES-256 (implementata da me 15enne… ma funzionava).
- Logging di tutte le operazioni (aggiunta, rimozione, apertura) con timestamp.
- Interfaccia drag-and-drop per aggiungere file e cartelle.
- Hashing della password.
- Aggiornamenti automatici.
Crittografia
Non sapevo bene cosa significasse “criptare”, tuttavia fui abbastanza furbo da non provare a scrivere un algoritmo da solo. L’implementazione di AES utilizzata dal programma la trovai su StackOverflow.
File explorer
L’interfaccia mostra i file presenti nella cartella cifrata. Facendo doppio click su un file, questo viene decifrato in una cartella temporanea e aperto con il programma predefinito. Per le immagini il programma, all’apertura di una cartella, decifrava al volo tutto (non proprio sicurissimo), motivo per cui aprire una cartella con molte immagini ci metteva un po’. Alla chiusura, i file temporanei vengono eliminati.
Export, import e cambio password
L’app permetteva di esportare e importare le cartelle cifrate (con un file .schest): semplicemente un file zip con i file cifrati e un piccolo file con l’hash della password. Il cambio password avveniva decifrando tutto con la vecchia password e ricifrando con la nuova.
Installer e aggiornamenti
Una cosa di cui ero abbastanza fiero erano gli aggiornamenti automatici. All’avvio l’app controllava da una CDN (un file .txt ☠️) se la versione fosse diversa da quella installata, e in tal caso scaricava un nuovo installer e lo eseguiva. Nulla di assurdo, ma faceva un bell’effetto.
Gestione spazio
L’app permetteva di fissare un limite di spazio, controllato a ogni aggiunta di file. Superato il limite, non si potevano aggiungere nuovi file, e una notifica avvisava mostrando spazio usato e disponibile.
Branding aziendale
L’app permetteva di personalizzare icona e nome visualizzato, oltre a disabilitare gli aggiornamenti. Non so bene il motivo di questa scelta: era ispirata dal Chrome della scuola, che all’apertura segnalava di essere “gestito dalla tua organizzazione”. Forse pensavo che qualche azienda volesse un’app del genere, chissà.
Cosa ho imparato
- Che la crittografia è complicata…
- Che scrivere software per sé stessi è più motivante di qualsiasi progetto scolastico.
- Che i commenti sono importanti.
- Che è importante progettare un software prima di scriverlo (ma ogni tanto è bellissimo improvvisare).
- Che puoi scrivere un’app decente anche se non sai cos’è una funzione o uno spazio di memoria.
Stato attuale
Funziona abbastanza bene se usata nel modo “previsto”, purtroppo tante eccezioni vengono gestite male. L’app ogni tanto si riavvia di proposito dopo certe operazioni (creazione spazio, cambio password) per ricaricare la configurazione: questo crea problemi con SmartScreen, che impedisce il riavvio. Ogni volta bisogna cliccare su “Altre informazioni” e poi “Esegui comunque”. Una volta non lo faceva: probabilmente SmartScreen è diventato più rigido.
Il codice è ancora su GitHub.