For this assignment, you will use your hash table ADT to create a personal password manager application (a password vault). Your application will store and retrieve passwords given a system descriptor that is provided by the user. The system descriptor can be any unique alphanumeric string. The information will be stored in a data file of your own design. You do not have to encrypt the passwords for this assignment, but are encouraged to do so if you have any intention of using the password vault. Your application must be intuitive and easy to use. Your program must have functions to authorize the user to use the program, open a password file and load it into the hash table, start a new password file, add passwords, remove passwords, retrieve passwords and update passwords.
The password program must be written in C including the hash table, hash functions, and functions to add, retrieve, edit and manage passwords. The UI should be constructed using ncurses as the UI library. Consult the ncurses tutorial in the Review section of the course for help with ncurses. The final program must run on the SOCS debian system without requiring any additional installations.
You will submit a tar.gz file to the assignment drop box. The tar.gz file will contain your source code, a make file, your documentation and your testing files. Details about the organization of these files are provided below under the Submission heading.
If you wish to encrypt passwords, consider using MD5 encryption. You may use code found on the Internet for the password encryption portion of your submission, provided it is well documented and cited.
Before you attempt this assignment, please ensure that you have a good understanding of the concepts listed below. Consult the Review section or References section of the course website if you need a refresher on any of these concepts:
Use a Hash Table ADT to create a personal password vault application. You may use the Hash Table you created for Lab Project 2 or you may create a new Hash Table. The hash table must be abstracted to use void * data.
The user of the application must be able to do the following: