Estoy buscando un método de cifrado que reciba una variable int y genere exactamente 11 dígitos hexadecimales .
Estoy comenzando con una aplicación existente, que ya tiene una base de datos de más de 130,000 registros, cada uno con su propio código de 11 dígitos hexadecimales. El algoritmo anterior solo generó 11 dígitos hexadecimales aleatorios, sin información codificada. El nuevo algoritmo debe cifrar la identificación de una tabla (tipo de datos int, 4 bytes) en una excavación de 11 hexágonos. En caso de colisiones (con registros antiguos, que deberían mantenerse) , estoy pensando en usar un contador como "sal", combínelo con el id que quiero cifrar y repito incrementando el contador. hasta que no choca.
He buscado mucho en estos días sobre métodos de cifrado, métodos simétricos y asimétricos, pero todos dan un resultado mayor que mi limitación de 44 bits / 11 dígitos hexadecimales. También encontré que un cyphertext tan corto no es seguro, pero estos datos no son tan críticos y no puedo cambiar esta limitación de la aplicación, así que está bien.
Debido a que necesito validar estos códigos en el futuro (verifique si la identificación desencriptada está presente en la tabla, cuando la información de fecha y hora indica que es un código de algoritmo nuevo) , no puedo tomar solo una parte de el cyphertext (por ejemplo, usando algo como "IZQUIERDA (código, 11)") .
La aplicación se ejecuta en PHP / MySQL. ¿Existe un método de cifrado que parametrice la duración de la salida? ¿O debería desarrollar un cifrado personalizado? En este caso, ¿alguna sugerencia para evitar colisiones?
Gracias de antemano.