Повторное шифрование (случайное заполнение + const int32) - секрет компромисса?

Will any encryption scheme safely allow me to encrypt the same integer repeatedly, with different random material prepended each time? Это похоже на операцию, которая может привести меня в горячую воду.

Я хочу предотвратить паутину элементов в моем веб-приложении, но при этом все еще имею постоянные идентификаторы / URL-адреса элементов, поэтому ссылки на контент со временем не истекают. Мои требования безопасности для этого не очень высоки, но я бы не стал делать что-то совершенно идиотское, что, очевидно, подрывает секрет.

// performed on each ID before transmitting item search results to the client
public int64 encryptWithRandomPadding(int32 id) {
    int32 randomPadding = getNextRandomInt32();
    return encrypt(((int64)randomPadding << 32) + id), SECRET);
}

// performed on an encrypted/padded ID for which the client requests details
public int32 decryptAndRemoveRandomPadding(int64 idToDecrypt) {
    int64 idWithPadding = decrypt(idToDecrypt, SECRET);
    return (int32)idWithPadding;
}

static readonly string SECRET = "thesecret";

Сгенерированные идентификаторы / URL-адреса являются постоянными, зашифрованные идентификаторы заполнены редко (менее 1 в uint32. Макс уникален, и я мог бы добавить еще одно постоянное заполнение, чтобы уменьшить вероятность существующего предположения), и клиент может выполнить тот же поиск и каждый раз получать одинаковые результаты с разными репрезентативными идентификаторами. Я думаю, что это соответствует моим требованиям, если только нет явной криптографической проблемы.

Example:

 encrypt(rndA + item1)   -> tokenA
 encrypt(rndB + item1)   -> tokenB
 encrypt(rndC + item2)   -> tokenC
 encrypt(rndD + item175) -> tokenD

Здесь нет способа определить, что tokenA и tokenB оба указывают на идентичные элементы; это предотвращает удаление пауком дубликатов результатов поиска без их извлечения (в то время как извлечение увеличивает счетчик использования). Кроме того, item2 может не существовать.

Зная, что повторный поиск будет возвращать один и тот же int32, дополненный несколькими способами с одним и тем же секретом,can I do this safely with any popular crypto algorithms? Спасибо, криптоэксперты!

примечание: это продолжение вопроса, который не сработал, как я надеялся:Зашифровать целое число с помощью секретной и общей соли

Ответы на вопрос(1)

Ваш ответ на вопрос