¿Cuál es la forma más eficiente de convertir un hash md5 en un entero único para realizar una operación de módulo?Convertir cadena md5 de 32 caracteres en entero
Respuesta
Como el idioma de la solución no se especificó, Python se usa para este ejemplo.
import os
import hashlib
array = os.urandom(1 << 20)
md5 = hashlib.md5()
md5.update(array)
digest = md5.hexdigest()
number = int(digest, 16)
print(number % YOUR_NUMBER)
Un md5 es 128 bits de información. Un python int generalmente va a ser de 32 o 64 bits de información, por lo que convertirlo a un int arrojará datos, ¿no es así? Creo que necesitas usar mucho tiempo. – elhefe
Bah, no importa, int() devolverá un largo si es necesario. – elhefe
¿Por qué lo convierte a la base 16? ¿Es esa la convención? – Nate
Hay más datos en un MD5 que caben incluso en un número entero de 64b, por lo que no hay forma (sin saber qué plataforma está utilizando) de obtener un número entero único. Puedes obtener uno único convirtiendo la versión hexadecimal en varios enteros que valen datos y luego combinándolos (suma o multiplicación). Sin embargo, la forma exacta en que lo haría dependerá del idioma que use.
Una gran cantidad de lenguaje del pondrá en práctica ya sea una función o unpack
sscanf
, que son buenos lugares para empezar a buscar.
Usted está asumiendo que "entero" está limitado a 64 bits. ¿Qué hay de BigInteger? –
Por supuesto, pero muchas plataformas no tienen números enteros de longitud arbitraria. Depende totalmente de la plataforma en la que se encuentre si hay una implementación BigInteger (nativa). –
Absolutamente, pero "depende de su plataforma" no es lo mismo que "no hay forma" :) –
No ha dicho en qué plataforma se está ejecutando, ni cuál es el formato de este hash. Es de suponer que es hexadecimal, por lo que tienes 16 bytes de información.
Para convertir eso a entero único entero, básicamente necesita un tipo entero de 16 bytes (128 bits). Muchas plataformas no tienen ese tipo disponible de forma nativa, pero puede usar dos valores long
en C# o Java, o BigInteger
en Java o .NET 4.0.
Conceptualmente necesita analizar la cadena hexadecimal en bytes, y luego convertir los bytes en un número entero (o dos). La forma más eficiente de hacerlo dependerá por completo de la plataforma que esté utilizando.
Gracias. ¿Cómo podría hacerse esto en php? – ensnare
Usted estaría viendo sscanf en PHP: http://au.php.net/manual/en/function.sscanf.php –
Excepto que a sscanf no parece gustarle el formato '% x', a menos que sea solo yo ... –
Deberá definir su propia función hash que convierta una cadena MD5 en un número entero del ancho deseado. Si quiere interpretar el hash MD5 como una cadena simple, puede probar el algoritmo FNV. Es bastante rápido y bastante uniformemente distribuido.
Si todo lo que necesita es módulo, realmente no necesita convertirlo a un entero de 128 bytes. Puede ir dígito por dígito o byte por byte, así.
mod=0
for(i=0;i<32;i++)
{
digit=md5[i]; //I presume you can convert chart to digit yourself.
mod=(mod*16+digit) % divider;
}
- 1. Convertir cadena/caracteres a entero en python
- 2. Convertir MD5 en cadena en java
- 3. Convertir std :: cadena en entero
- 4. cadena Convertir a entero en el mapa()
- 5. Conversión de entero de 32 bits a 4 caracteres
- 6. Convertir Enum SUBYACENTE Valor entero en Cadena
- 7. ¿Convertir cadena a entero/flotar en Haskell?
- 8. Convertir cadena a entero en XSLT 1.0
- 9. Convertir cadena binaria en número entero
- 10. Cómo convertir cadena a entero en UNIX
- 11. convertir cadena a entero en C++
- 12. Cómo convertir cadena a entero en C#
- 13. Convertir cadena con coma al entero
- 14. Rails ¿Migración para convertir cadena a entero?
- 15. Conversión de entero en cadena
- 16. Cómo convertir un entero de 32 bits de unsigned a firmado en MySQL o PHP?
- 17. MD5 es de 128 bits, pero ¿por qué tiene 32 caracteres?
- 18. cómo convertir número entero de cadena en C objetiva
- 19. Representar hash MD5 como un número entero
- 20. Convertir una cadena completa en un entero en JavaScript
- 21. Cómo convertir cadena en entero en h: selectOneMenu
- 22. Convertir factor en entero
- 23. Convertir entero en conjunto
- 24. ¿Cómo convertir una cadena a entero en VHDL?
- 25. Convertir un número entero en una cadena sin asignar memoria
- 26. Convertir manualmente una cadena a un entero en Java
- 27. convertir un entero a una cadena en Erlang
- 28. cómo convertir un entero a una cadena en gnuplot?
- 29. Cadena Convertir contiene una identificación en un entero Id
- 30. ¿Cómo convertir una cadena o entero a binario en Ruby?
¿Quieres hacer hash% x o x% hash? En el primer caso, es posible que ni siquiera necesite todo el hash para calcular la respuesta. – Joren
Estoy buscando hash% X – ensnare
¿Alguna de estas respuestas ha sido útil o aún necesita más información? –