Assume, for good and sufficient reasons, that I wish to have an encrypted grade database. Students are allowed to retrieve their own grades from the database, but no others. They are also allowed to retrieve the average grade for any assignment. A database record contains a login name and a set of grades. There is no limit to the number of grades in a record, nor is there any limit to the number of records in the database. Some other program run by the instructor -- a program I'm *not* asking you to write -- is used to add students, grades, etc., to the database. This is relevant because from one run to the next of your program, the number of records or the number of fields may change. You must take this into account when designing your program. The "database" is actually an ASCII file, with one line per record; fields are separated by one or more whitespace characters. When a student executes the program, the program determines the login name via getuid() and getpwuid(). This lets it know which student's record to retrieve. The decryption key, of course, must be protected from student access. Since this assignment will presumably use setuid, use the acm logins you used for the previous assignment. For encryption, see the des_crypt man page on the compute0n machines. You'll probably find xcrypt helpful as well. These routines use DES, which is not secure; however, the concepts would apply to any other block cipher. The deliverables are the retrieval program, and some sample databases in both cleartext and ciphertext. You'll obviously need an auxiliary program; please turn it in, but it won't be graded.