A dictionary-attack is a one in which the attacker guesses a subset of the allowed input values based on assumptions about likely keys (e.g. that they may be based on dictionary words).
Dictionary attacks can be made more efficient (in terms of time to use) by pre-computing the hashes of all of the potential keys in the dictionary. This dictionary of hashes is referred to as a rainbow table.
Rainbow tables can be invalidated by the use of a salt, which increases the key size by appending random data. This will at least force the re-computation of a rainbow table for a specific instance (assuming the salt can be determined by the attacker). However, if a sufficiently random salt is used for every hashed value, creating a rainbow table would become impractical, requiring the attacker to computer a rainbow table as many times larger as the number of possible values of the salt.[1]