Грубая сила должна работать, если значение uint составляет 32 бита.Попробуйте хотя бы 2 ^ 32 строки, и одна из них, скорее всего, хеширует к тому же значению.На современном компьютере это займет всего несколько минут.
У вас есть 12 возможных символов, а 12 ^ 9 - это примерно 2 ^ 32, поэтому, если вы попробуете 9 строк символов, вы, вероятно, найдете целевой хеш.Я буду делать 10 строк символов, чтобы быть в безопасности.
(простая рекурсивная реализация в C ++, не очень хорошо знаю C #)
#define NUM_VALID_CHARS 12
#define STRING_LENGTH 10
const char valid_chars[NUM_VALID_CHARS] = {'0', ..., '#' ,'*'};
void unhash(uint hash_value, char *string, int nchars) {
if (nchars == STRING_LENGTH) {
string[STRING_LENGTH] = 0;
if (Hash(string) == hash_value) { printf("%s\n", string); }
} else {
for (int i = 0; i < NUM_VALID_CHARS; i++) {
string[nchars] = valid_chars[i];
unhash(hash_value, string, nchars + 1);
}
}
}
Затем вызовите его с помощью:
char string[STRING_LENGTH + 1];
unhash(hash_value, string, 0);