Si realmente se desea tal cosa, entonces, en lugar de hash, podría considerar construir las cadenas a partir de un valor de entrada numérico en tiempo de ejecución.
La ventaja es que, como señaló @Philipp, no tiene sentido intentar ocultar los códigos en el ejecutable si puede esperar que se publiquen en Internet de todos modos. Hashed o no, la misma palabra encontrada en Internet e ingresada en el juego dará el mismo hash y funcionará de cualquier manera.
Excepto ... excepto si el código de otra persona no funciona para ti. Lo que puede hacer trivialmente: no es 100% a prueba de manipulaciones pero es razonablemente difícil de solucionar para el usuario promedio. Algo tan simple como lo hará el "generador de nombres en línea Elven" (puede ser arbitrariamente simple, realmente no necesita mucho de un motor de generación de texto markov, extraer 4-5 sílabas de una lista aleatoria es lo suficientemente bueno).
Simplemente genere un número específico del usuario o específico de la máquina, ni siquiera tiene que ser perfectamente único o muy resistente a la manipulación. Algo que probablemente sea diferente para la mayoría de las personas y que sea poco probable que cambie regularmente, por ejemplo, el nombre de red de la computadora, la dirección MAC o el GUID de la unidad de disco del sistema, lo que sea (el número de serie de la GPU puede ser un muy malo)idea ya que es probable que los usuarios actualicen las GPU). Agregue a eso el código numérico al que se refiere el código de desbloqueo e ingrese eso en su generador de palabras. Pero prepárese para responder consultas de soporte cuando los jugadores usen dos computadoras o cambien su tarjeta de red (lo cual es inusual, pero no imposible). Puede ser un buen plan generar solo la ID aleatoria una vez y almacenarla con la configuración del juego. De esa manera, al menos no interrumpe las instalaciones existentes en la misma máquina si algo cambia.
O bien, puede usar el número de serie del juego, que es único y funcionará si el usuario cambia el hardware (irónicamente, sin embargo, esto podría promover la piratería ya que los códigos de desbloqueo compartidos funcionan para series pirateadas pero no para clientes legítimos).
Tenga en cuenta que evitar que los usuarios hagan trampa no es necesariamente algo bueno. En un juego fuera de línea (es decir, no competitivo), generalmente no hay problema si el usuario hace trampa y obtiene los códigos de algún lugar en lugar de jugar. Él solo se está engañando a sí mismo. A quien le importa.
Por otro lado, ponerse demasiado en su camino si realmente desean hacer trampa es una gran oportunidad para cabrear por completo a los clientes que pagan.
Entonces ... antes de hacer algo de esa manera, piense muy bien si realmente quiere eso y qué quiere. Muy posiblemente, tener cadenas legibles por humanos (o trivialmente hechas "ilegibles" con xor) es lo suficientemente bueno y de hecho preferible.