Safe cracker string with all combinations
Your algorithm is suboptimal.  According to this website, a de Bruijn sequence for SafeCracker.genCrackerString("0123", 3) should be 66 characters long:

000100200301101201302102202303103203311121131221231321332223233300


However, your output is 74 characters long:

00010020030011012013011121021131031122022123023121320321330331322232332333


A simpler example is genCrackerString("12", 2), which your unit test says should be "112122".  However, "11221" is shorter.  So, your unit tests are invalid as well.