The correct answer is A and B.
Most attacks on hash functions focus on:
- Finding collisions (A): This is when two different inputs produce the same hash output, which can be exploited in various ways.
- Pre-generating millions of hashes and comparing them to the plaintext that generated it (B): This refers to the use of techniques like rainbow tables to find a matching hash.
While good random guessing (C) is a method that can be used in some contexts, it is not a primary focus in attacks on hash functions compared to collision finding and pre-computation. Thus, the combination of A and B is the most accurate choice.