Systems Programming Project 2
April 11, 2024
Copyright By PowCoder代写 加微信 powcoder
1 Hashassin
Now that we have some basics of hashing, etc. down, we are going to make a full blown rainbow
table implementation.
You can accept the GitHub classroom assignment at https://classroom.github.com/a/nZLy9P4v.
This is a group project with a maximum of three students per group.
2 Instructions
For this project, you will be extending your solution from project 1 to include a full blown imple-
mentation of a rainbow table and corresponding password cracker.
As with Project 1, your binary crate should be in a directory called cli and it should compile to a
binary named hashassin.
Your library crate should be in a directory called core and it should be available called hashassin-core
and usable by other crates via use hashassin core::Whatever.
Your CLI will will support several additional commands: 1) gen-rainbow-table, 2) crack, and
3) server.
gen-rainbow-table will generate a rainbow table with chains starting from a list of preexisting
passwords. gen-rainbow-table must have several options that can be set:
1. –num-links, which specifies the number of links generated chains should have. –num-links
must be greater than zero and should have a default value of 5.
2. –threads, the number of threads to use when generating the rainbow table (format specified
https://classroom.github.com/a/nZLy9P4v
3. –out-path, which is where the generated rainbow table should be saved.
4. –threads, the number of threads to use to generate passwords. This value must be greater
than zero and the maximum value should be the maximum length of an array on whatever
system the program is being run on. –threads must have a default value of 1.
5. –password-length, which is number of characters in the passwords for this rainbow table.
–password-length must be greater than zero and have a default value of 4.
6. –algorithm, the hashing algorithm that should be used for this rainbow table. –algorithm
should have a default value of md5 (i.e., the default hashing algorithm should be md5).
By default, the valid character set for passwords is the same as Project 1: valid ASCII, both caps
and lower case, and including punctuation and spaces but not including non-printable characters
like newline or tabs or bells.
The on disk format for your rainbow table must (by default) have the start and end points of each
chain, separated by a tab, with one chain per line.
For example, a rainbow table for 8 character passwords using md5:
Vty.whm5\tC;hLG*Fg
6_wUZNF\thATA!Kpk
’m~BMxT\t-FV}|[ka
Dni_2/TU\tZBFUpjZw
v~y^2i$e\tYy(7.I44
E0