Buono per te per aver provato a imparare questo. Tieni presente che qualsiasi cosa produca non dovrebbe essere inserita in un vero ambiente di produzione, nemmeno a livello personale. Considera questa come un'opportunità apprendimento e non una ricetta per cucinare il tuo gestore di password. Di solito, dovresti fare qualcosa in questo modo:
-
Genera una chiave casuale a 256 bit. Questa è la tua chiave di crittografia master.
-
Prendi la password principale ed eseguila attraverso PBKDF2 insieme a 64-bit salt e ottieni 128 -bit chiave. Questa è la tua chiave di crittografia secondaria.
-
Utilizza la chiave di crittografia secondaria per crittografare la chiave di crittografia master utilizzando AES nel Modalità SEEX e memorizzala da qualche parte.
-
Per il database, utilizza il formato che desideri. Dato che non sono sicuro quale scegliere, ti dirò XML . Cripta il database utilizzando la chiave di crittografia master.
-
Quando l'utente vuole accedere al database, carica il file crittografato nella memoria, prendi la password principale ed eseguila attraverso PBKDF2 con sale e ottieni la chiave secondaria, usa la chiave secondaria per decodificare la chiave master, e finalmente usa la chiave master per decifrare il database.
-
Dopo che l'utente ha terminato l'accesso; aggiungendo; modifica; o eliminando le voci dal database, è sufficiente crittografarlo nuovamente e scartare tutto dalla memoria.
-
Quando l'utente vuole cambiare la password, decifrare la chiave secondaria dalla vecchia password, decrittografare la chiave master, derivare una nuova chiave secondaria dalla nuova password, usare quella chiave per crittografare la chiave principale. In questo modo, non è necessario decrittografare e crittografare nuovamente il database quando la password viene modificata, poiché la chiave principale viene mantenuta uguale.
Infine, ti consiglio di dare un'occhiata al codice sorgente di KeePassX . Un sacco di informazioni possono essere raccolte da lì.
Lo ripeto, non utilizzare l'applicazione effettiva che produci . Potresti (e molto probabilmente lo farai) fare qualcosa di sbagliato ad un certo punto. Diamine, le mie istruzioni potrebbero essere (e probabilmente sono) sbagliate.
Buon apprendimento!