2011-08-01 22 views
5

Me pregunto ... ¿cuál es la longitud máxima de la cadena que va a ser hash?¿Cuál es la longitud máxima de la cadena que va a ser hash?

Por ejemplo, para hash Hello, world! con SHA-1 no hay problemas. Pero ¿qué pasa con las cuerdas que tienen 100'000'000 caracteres de largo? ¿Funciona? ¿De alguna manera aumenta la posibilidad de colisión?

¿Hay algún límite?

Respuesta

8

Wikipedia muestra el tamaño máximo de mensaje en bits para SHA-1 como 2^64-1. Entonces, esto sería 2^60-1 caracteres unicode. En decimales 1.152.921.504.606.846.975 caracteres.

La mayoría de los límites de cadenas de idiomas son de 2GB - 1 caracteres.

La probabilidad de colisión está sujeta al birthday problem, específicamente el bit "Tabla de probabilidades". Estoy no es lo suficientemente inteligente demasiado perezoso para trabajar la probabilidad de colisiones usando SHA-1 con una colección de cadenas de 100MB ...

+1

La probabilidad de colisiones depende de cuántas cadenas hash, no de la longitud individual de cada cuerda. No obtendrá ningún tipo de colisión con una sola cuerda, ya que solo tiene un valor ... –

+0

@Thomas Pornin: Sí, dije "una colección de cadenas de 100MB". Y sería una colección bastante grande también con todas las permutaciones, etc. – gbn

3

Puede hash entradas largas. Sí, los algoritmos hash aún funcionan en grandes entradas. No, una entrada más grande no aumenta la probabilidad de colisión. (Pero tomarán más tiempo). Debe tener en cuenta que 100 millones de caracteres no son tantos bytes para una computadora, y la mayoría de los hash que se usan hoy en día son rápido. Tomaría una computadora moderna tal vez unos pocos segundos para manipular una cadena tan larga.

No hay límites teóricos, y los límites prácticos permiten cualquier uso razonable.

Cuestiones relacionadas