2009-06-27 19 views
5

¿Hay alguna posibilidad de que un hash SHA-1 pueda ser puramente numérico, o el algoritmo asegura que debe haber al menos un carácter alfabético?¿Puede un hash SHA-1 ser puramente numérico?

Edit: Lo estoy representando en base 16, como una cadena devuelta por la función sha1() de PHP.

Respuesta

15

técnicamente, un hash SHA1 es un número, lo más habitual es que esté codificado en la base 16 (que es lo que hace sha1 de PHP), de modo que casi siempre tiene una letra. Sin embargo, no hay garantía de esto.

Las probabilidades de un hex codificados número 160 de bits que tiene no AF dígitos son (10/16) o aproximadamente 6,84227766 × 10 -9

+0

Gracias! Precisamente lo que quería saber. :) –

+1

En términos más aceptables: aproximadamente 1 de cada 146,000,000 SHA1 expresados ​​en hexadecimal no tienen dígitos superiores a 9. –

+8

Por ejemplo, hashlib.sha1 ('169977707'). Hexdigest() == '5938266572196464632409940308852871296620' –

1

Puede representar la salida de SHA1 (al igual que cualquier datos binarios) en cualquier base que desee. Específicamente, puede codificar el resultado en base-8/10.

3

El hash SHA-1 es un número de 160 bits. Por la facilidad de escribirlo, normalmente se escribe en hexadecimal. Los dígitos hexadecimales (base 16) son 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e y f. No hay nada especial sobre las letras. Cada carácter hexadecimal equivale a 4 bits, lo que significa que el hash se puede escribir en 40 caracteres.

No creo que haya ninguna razón por la que un hash SHA-1 no pueda tener letras, pero es improbable. Es como generar un número aleatorio de 40 dígitos (base 10) y no obtener 7s, 8s o 9s.