Двустороннее «хеширование» строки

Я хочу сгенерировать int из строки и иметь возможность сгенерировать ее обратно. Что-то вроде хеш-функции но двусторонняя функция. Я хочу использовать целые числа в качестве идентификатора в моем приложении, но хочу иметь возможность преобразовать его обратно в случае регистрации или отладки.

Например:

int id = IDProvider::getHash("NameOfMyObject");

object * a = createObject(id);

...

if(error)
{
    LOG(IDProvider::getOriginalString(a->getId()), "some message");
}

Я слышал о слегка измененном CRC32, чтобы он был быстрым и на 100% обратимым, но я не могу его найти и не могу написать его сам.

Есть подсказки, что мне использовать? Спасибо!

править Я только что нашел источник, из которого у меня есть вся CRC32:

Джейсон Грегори: Архитектура игрового движка

цитата:

«Как и в любой системе хеширования, возможны коллизии (т. е. две разные строки могут иметь один и тот же хэш-код.) Однако с подходящей хеш-функцией мы можем почти гарантировать, что коллизии не произойдут для всех разумных входных строк, которые мы можем использовать в нашей игре. В конце концов, 32-битный вариант хеширования представляет более четырех миллиардов возможных значений. Так что, если наша хеш-функция хорошо справляется с распределением строк по всему этому очень большому диапазону, мы вряд ли столкнемся. В Naughty Dog мы использовали вариант алгоритма CRC-32 для хеширования наших строк, и мы не столкнулись ни с одной коллизией за более чем два года разработки Uncharted: Drake's Fortune."

5
задан relaxxx 30 October 2011 в 19:22
поделиться