Алгоритмы SHA должны подходить для этого (SHA-1, SHA-512 и т. Д.). Они используются во многих местах, где MD5 также может быть использован, но, кажется, более уважаемы. Я использую их для хеширования паролей, но звучит так, как будто их функциональность в качестве одностороннего хэша тоже подойдет для этого.
Если вы хотите иметь фиксированный размер, вы можете затем Base64 кодировать результирующие байты и взять первые N цифр, которые вы хотите. Даже при том, что вы теряете часть исходного хэша, это должно дать вам достаточно большой набор различных возможных ключей, которые вам практически невозможно повторить. В качестве системы отсчета это пример UUID в кодировке Base64: "iFHqaiNjhTDpxp7ahBPX0A"
Возможный набор результатов UUID настолько велик, что принято случайным образом генерировать их с ожиданием того, что они уникальны (я знаю, это удивительно, но сделайте поиск).