Если такая вещь действительно желательна, то вместо хеширования вы можете рассмотреть возможность построения строк из числового входного значения во время выполнения.
Преимущество состоит в том, что, как указал @Philipp, бессмысленно пытаться скрыть коды в исполняемом файле, если вы все равно можете ожидать их размещения в Интернете. Хешированный или нет, одно и то же слово, найденное в интернете и введенное в игру, даст тот же хеш и будет работать в любом случае.
За исключением ... кроме случаев, когда чужой код не работает для вас. Что вы можете сделать тривиально - не на 100% защищено от несанкционированного доступа, но достаточно сложно обойти для среднего пользователя. Подойдет все, что может сделать «Генератор имён эльфов в Интернете» (может быть сколь угодно простым, на самом деле не нужно много движка генерации текста на языке markov, достаточно выбрать 4-5 слогов из случайного списка).
Просто сгенерируйте какое-нибудь пользовательское или машинное число, оно даже не должно быть совершенно уникальным или очень устойчивым к взлому. Что-то, что, вероятно, отличается для большинства людей и вряд ли будет регулярно меняться, например, сетевое имя компьютера, MAC-адрес или GUID системного диска, что угодно (серийный номер графического процессора может быть очень плохимидея, так как пользователи могут обновить GPU). Добавьте к этому числовой код, к которому относится код разблокировки, и введите его в свой генератор слов. Но будьте готовы ответить на вопросы поддержки, когда игроки используют два компьютера или меняют сетевую карту (что необычно, но не невозможно). Это может быть хорошим планом - генерировать случайный идентификатор только один раз и сохранять его с настройками игры. Таким образом, по крайней мере, это не нарушает существующие установки на той же машине, если что-то меняется.
Или вы можете просто использовать серийный номер игры, который уникален и будет работать, если пользователь меняет оборудование (по иронии судьбы, это может способствовать пиратству, поскольку общие коды разблокировки работают для пиратских сериалов, но не для законных клиентов!).
Обратите внимание, что предотвращение обмана пользователей не обязательно является хорошей вещью. В оффлайн (то есть неконкурентной игре) обычно нет проблем, если пользователь обманывает и получает коды откуда- то, а не из игры. Он обманывает только себя. Какая разница.
С другой стороны, слишком много мешать им, если они действительно хотят обмануть, - отличная возможность полностью разозлить платящих клиентов.
Итак ... прежде чем делать что-то таким образом, очень тщательно подумайте, действительно ли вы этого хотите и чего хотите. Вполне возможно, наличие читаемых человеком строк (или тривиально сделанных «нечитаемых» с помощью xor) просто достаточно хорошо и действительно предпочтительнее.