sql >> Base de Datos >  >> RDS >> Mysql

Generación de números de seguimiento únicos

Para datos sin sentido, los hashes del tiempo más una sal siempre son sólidos como una roca y no se pueden adivinar fácilmente (perdone a Python, he escuchado de esta cosa de Ruby pero nunca la sostuve en mis manos):

>>> hashlib.md5(str(time.time()) + "!salt!").hexdigest()
'7a8b73fa7e0dadf246612e6001ede165'

Acórtalo, si quieres:

>>> hashlib.md5(str(time.time()) + "!salt!").hexdigest()[:16]
'46ffb69ebc96412d'

En su lugar, use un número entero, si lo desea, pero la longitud tiene la posibilidad de variar con este código, a menos que haga cero:

>>> int(hashlib.md5(str(time.time()) + "!salt!").hexdigest()[:13], 16)
1346212029197308

Antes de "zomg md5 no es criptográfico seguro":

>>> int(hashlib.sha256(str(time.time()) + "!salt!").hexdigest()[:13], 16)
1948411134966366

Demonios, ni siquiera tienes que usar el tiempo, puedes usar un número entero autoincrementable, siempre que lo agregues:

>>> int(hashlib.sha256(str(1) + "!salt!").hexdigest()[:13], 16)
1269883740611281
>>> int(hashlib.sha256(str(2) + "!salt!").hexdigest()[:13], 16)
3655373802716929

Hachís. ¿Hay algo que no puedan hacer?