É quase o mesmo que ao armazenar senhas. Você deve ter uma chave secreta exclusiva conhecida apenas pelo gerador e seu programa. Use esta chave para manipular os detalhes (nome de usuário, senha, organização, etc) e, em seguida, faça o hash. Você pode fazer uma codificação de transferência trivial no Base32 no hash ou simplesmente movê-lo para uma sequência hexadecimal, se você não se importa com um formato.
Alguma dica a ser observada ao implementá-las?
Mantenha segredos secretos e separados. Torne sua implementação improvável. Se alguém quebrar isso, você pode alterar facilmente a implementação? Uma implementação comum em aplicativos de desktop é usar um servidor remoto para validar a licença. Isso remove a possibilidade de alguém fazer engenharia reversa de um hash ou algoritmo, inspecionando o próprio aplicativo.