elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Como crear hash alfanumérico autoincrementado en php y mysql?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como crear hash alfanumérico autoincrementado en php y mysql?  (Leído 7,282 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Como crear hash alfanumérico autoincrementado en php y mysql?
« en: 17 Octubre 2010, 05:03 am »

Hola, se me ocurrió hacer un sistema web que lleva hashses únicos y deben ser lo más cortos posible, quería poner los primeros 5 carácteres de un md5(microtime()) pero qujiero evitar las colisiones, además se me ocurrió otra manera aún mas cotra de hacer hashses sin tener colisiones.

Este sistema es muy similar a tinyurl por lo tanto hay dos tipos de hashses, uno generado por el sistema y uno personalizado opcional.

La idea que tube es que primero comienze el id del enlace con 0,1,2,3,4,5... despues 7,8,9,a,b,c,d,e... despues mayusculas ...x,y,z,A,B,C... y cuando llegue a Z comenzar otraves.. X,Y,Z,01,02,03,04,05... despues 0X,0Y,0Z,10,11,12,13,14... 1x,1y,1z,1A,1B...
se entiende? xD

De esta forma generaría hashses que contengan números y letras mayusculas y minúsculas abarcando todas las combinaciones posibles y así hacer hashses de uno, dos, tres carácteres sin tener colisiones.

Para esto habia hecho un pseudocódigo donde..
Código
  1. function calcula_alias(){
  2. sql: obtiene el aliaz mas corto y el último alfabético con límite 1
  3. verifica desde el ultimo caracter hasta el primero
  4. del 0 al 9 , de la a a la z y de la A a la Z
  5. si es Z revisa el siguiente
  6. si llega al final agregar uno y resetear todos a 0
  7. }

de esta forma lograría hacer el autoincrementado pero el problema es que el usuario puede ingresar su hash personalizado, por lo tanto digamos que alguien ingresa "ZZZ" como de dormir y cuando llegue el hash a tres carácteres se va a seleccionar ese porque será el ultimo de la tabla y me va a joder todas las demás combinaciones entre 000 y ZZZ, ahora, tampoco puedo tomar el primero porque si tomo el aaa quien me dice que no hay un aab.

Se entiende mi rompecabezas? xDD el sistema está muy muy útil ya que solucionaría el problema que ningún hosting de archivos ha podido solucionar, ni si quiera facebook ya que ellos utilizan un hash correspondiente a muchas cosas para evitar colisiones, imageshack, megaupload, tinyurl, etc , a todos les solucionaría la vida con este sistema xD pero aún se me está haciendo un poco complicado.

También pensé que si el hash se repite entonces anteponer un hash aleatorio de 5 carácteres pero no es la idea.

Conversando con nakp, si no me resulta lo que haré es utilizar el id numérico y sacar el max() del id  y verificar si existe en la columna de los hashses , solo que como será un string se me hará un poco complejo la verificación, pero es posible.

¿Alguien tiene alguna idea para que me de una mano?

Mientras tanto me conformé con un hash de 5 carácteres con algunos símbolos para evitar una colisión

Código
  1. function calcula_alias($cantidad = 5){
  2. $caracteres = '=-_{}$;,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  3. for($cuenta = 0; $cuenta <= $cantidad; $cuenta++){
  4.  $hash .= $caracteres[rand(0,strlen($caracteres) - 1)];
  5. }
  6. return $hash;
  7. }


« Última modificación: 17 Octubre 2010, 05:34 am por WHK » En línea

Og.


Desconectado Desconectado

Mensajes: 822


Aprendiendo de la vida


Ver Perfil
Re: Como crear hash alfanumérico autoincrementado en php y mysql?
« Respuesta #1 en: 17 Octubre 2010, 07:43 am »

Código
  1. function calcHash($num)
  2. {
  3. $chars = 'zaq1xsw2cde3vfr4bgt5nhy6mju7ki8lo9p0ZAQXSWCDEVFRBGTNHYMJUKILOP';
  4. $hash = "";
  5. $cont = 0;
  6. do {
  7. $pila[$cont] = $chars[$num%strlen($chars)];
  8. $num = (int)$num/strlen($chars);
  9. $cont++;
  10. } while($num);
  11. $cont--;
  12. while($cont--)
  13. $hash .= $pila[$cont];
  14. return $hash;
  15. }

Esa función te hará las combinaciones basadas en un numero.
Ahora, que tal que guardas el numero del ultimo ID generado en una tabla aparte. Y cada ves que metas un nuevo ID le sumas 1 al anterior y posteriormente revisas en la tabla para ver si ese nuevo ID no ha sido previamente reservado (los ID's que puedes elegir). Después de guardar el nuevo ID actualizas el campo que lleva el ultimo ID aleatorio generado.

Espero te sirva.


En línea

|-
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Como crear hash alfanumérico autoincrementado en php y mysql?
« Respuesta #2 en: 17 Octubre 2010, 08:54 am »

vale, digamos que 5 personas diferentes ingresaron el id 500,501,502 y 503, ahora digamos que vamos en el id 499, al procesarlo vemos si existe el 500, como existe verifica 501 pero este ya existe asi que buelve a verificar... 503, pero también está....
ahora digamos que hay mil números ya ingresados xDD no voy a hacer mil querys verificando una por una si ya existe, además no es necesario saber el último id ingresado en una nueva tabla, para eso usaría last_insert() o max() pero aún así fallaría

gracias de todas formas
En línea

Og.


Desconectado Desconectado

Mensajes: 822


Aprendiendo de la vida


Ver Perfil
Re: Como crear hash alfanumérico autoincrementado en php y mysql?
« Respuesta #3 en: 17 Octubre 2010, 16:18 pm »

Ok, crees factible una tabla de respaldo?
algo asi:

IDusuado
11
20
30
41
51
60
71
...

Entonces para saber que nuevo ID asignaras haras una consulta asi:
Código
  1. SELECT `ID`  FROM `tabla` WHERE usado='0' ORDER BY ID LIMIT 1;

Y cada ves que uses un nuevo ID lo tachas de esta tabla marcándolo con un 1.
El problema radica en que para cubrir todas las combinaciones de ID's de 5 caracteres harías una tabla con 916,132,832 campos.
No se si mysql pueda manejar esa cantidad de datos :P
« Última modificación: 17 Octubre 2010, 16:23 pm por Og. » En línea

|-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como crackeo datos md5 o que puede ser Alfanumérico
Hacking
Enrique357 6 4,616 Último mensaje 7 Abril 2011, 21:25 pm
por Enrique357
[PHP-MYSQL] Como crear un sp en php?
PHP
klaine 3 2,100 Último mensaje 1 Noviembre 2011, 15:47 pm
por lnvisible
Aplicacion para crear un teclado de celular: Alfanumerico.
Programación Visual Basic
FelixJMaxwell 1 2,829 Último mensaje 24 Febrero 2013, 22:04 pm
por FelixJMaxwell
[ASP.Net] Validacion Password NO alfanumerico
.NET (C#, VB.NET, ASP)
larezaka 1 2,295 Último mensaje 16 Octubre 2014, 11:07 am
por larezaka
¿Cómo puedo crear un conteo infinito con PHP/MySQL/JS?
Desarrollo Web
Kryl0n 2 2,181 Último mensaje 15 Noviembre 2016, 17:01 pm
por [u]nsigned
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines