Я бы также предложил рассмотреть различные алгоритмы в пространстве имен дайджеста. Чтобы было сложнее угадать, чем (или в дополнение к) посолить секретную фразу-пароль, вы также можете использовать точный дамп времени:
require 'digest/md5'
def hash_url(url)
Digest::MD5.hexdigest("#{Time.now.to_f}--#{url}")
end
Поскольку результат любого алгоритма хеширования не гарантированно является уникальным, не забудьте проверить уникальность вашего результата по сравнению с ранее сгенерированными хешами, прежде чем предполагать, что ваш хеш пригоден для использования. Использование Time.now делает повторное выполнение тривиальным, поскольку вам нужно только вызывать, пока не будет сгенерирован уникальный хеш.