Cifrar repetidamente (relleno aleatorio + const. Int32) - ¿compromiso secreto?

¿Cualquier esquema de cifrado me permitirá cifrar de forma segura el mismo número entero repetidamente, con diferentes materiales aleatorios precedidos cada vez? Parece el tipo de operación que podría meterme en el agua caliente.

Quiero evitar la propagación de elementos en mi aplicación web, pero aún tengo ID / URL de elementos persistentes para que los enlaces de contenido no caduquen con el tiempo. Mis requisitos de seguridad no son realmente altos para esto, pero prefiero no hacer algo totalmente absurdo que obviamente comprometa el secreto.

// 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";

Las ID / URL generadas son permanentes, las ID encriptadas están pobladas escasamente (menos de 1 en uint32.Max son únicas, y podría agregar otro relleno constante para reducir la probabilidad de una suposición existente), y el cliente puede ejecutar la misma búsqueda y Obtenga los mismos resultados con diferentes ID de representantes cada vez. Creo que cumple con mis requisitos, a menos que haya un problema criptográfico evidente.

Ejemplo:

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

Aquí, no hay manera de identificar que tokenA y tokenB apuntan a elementos idénticos; esto evita que una araña elimine resultados de búsqueda duplicados sin recuperarlos (mientras recupera incrementa el medidor de uso). Además, item2 puede no existir.

Sabiendo que volver a ejecutar una búsqueda devolverá el mismo int32 rellenado múltiples formas con el mismo secreto,¿Puedo hacer esto de forma segura con cualquier algoritmo criptográfico popular?? Gracias, expertos en criptografía!

nota: este es un seguimiento de una pregunta que no funcionó como esperaba:Cifrar entero con un secreto y sal compartida

Respuestas a la pregunta(1)

Su respuesta a la pregunta