In cryptography, a brute-force attack consists of an attacker submitting many passwords or passphrases with the hope of eventually guessing correctly. The attacker systematically checks all possible passwords and passphrases until the correct one is found. Alternatively, the attacker can attempt to guess the key which is typically created from the password using a key derivation function. This is known as an exhaustive key search. In our project, we studied two main notion: the "hashs" and the "rainbow table". The first one is to put an entry of any size in a line with a fixed number of characters (text/number) using a mathematical function. The other one is a precomputed table for caching the output of cryptographic hash functions, usually for cracking password hashes.