2010-12-12 66 views
9

La définition de SHA-256 semble être telle que l'entrée constituée d'un seul bit "1" a une valeur de hachage bien définie, distincte de celle du "01" octet (puisque le remplissage est fait sur la base de longueur de l'entrée en bits).Qu'est-ce que le hachage SHA-256 d'un seul bit "1"?

Cependant, en raison de problèmes d'endianness et le fait qu'aucune implémentation que je peux trouver en charge l'alimentation en bits simples, je ne peux pas tout à fait comprendre quelle est cette valeur correcte.

Alors, quel est le hachage correct du 1 bit long entrée constituée du bit "1"? (pas l'entrée long octet [] {1} de 8 bits).

+1

pourquoi ???????????? –

+1

Vous pouvez le calculer à la main: http://en.wikipedia.org/wiki/SHA-2#SHA-256_.28a_SHA-2_variant.29_pseudocode mais il deviendrait assez pénible assez rapidement. – MatrixFrog

+3

@dan: pourquoi pas ???????????? –

Répondre

8

OK, selon ma propre implémentation:

1-bit string "1":

B9DEBF7D 52F36E64 68A54817 C1FA0711 66C3A63D 384850E1 575B42F7 02DC5AA1 

chaîne 1 bit « 0 ":

BD4F9E98 BEB68C6E AD3243B1 B4C7FED7 5FA4FEAA B1F84795 CBD8A986 76A2A375 

J'ai testé cette implémentation o n plusieurs entrées standard multiples de 8 bits, y compris la chaîne de 0 bit, et les résultats étaient corrects.

(bien sûr le point de cette question était de valider les résultats ci-dessus en premier lieu, donc à utiliser avec précaution ...)

+1

Je confirme ces valeurs. Ma propre implémentation de SHA-2 vient de sphlib (http://www.saphir2.com/sphlib/). Le code C gère les entrées avec des longueurs non multiples de 8. –

+0

Merci @Thomas, je vais marquer cela accepté alors. –

+0

Également confirmée par l'implémentation de Perl, qui accepte les chaînes en codage binaire. –

2

Je ne sais pas si j'ai bien compris votre question.

SHA-256 fonctionne avec des tailles de bloc de 64 octets (= 512 bits). Cela signifie que les petites entrées doivent être rembourrées en premier. Le résultat du rembourrage ressemble à ceci:

For Bit 1: 1100000000000...00000000001 
For Bits 01: 0110000000000...00000000010 

Comme ce résultat sont distincts, les résultats des fonctions de compression suivantes seront aussi. Et donc les valeurs de hachage sont. Le document standard explique le rembourrage assez descriptif: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf

+0

non seulement SHA-256, je ne peux pas penser à un algorithme qui ne pas pad ou répéter de petites entrées. –

+1

La taille de bloc pour SHA256 est de 512 bits et non de 256 bits. Voir RFC: 4634 "US Secure Hash Algorithms (SHA et HMAC-SHA)", http://www.ietf.org/rfc/rfc4634.txt –

2

Il y a un code C disponible en section 8 de RFC 4634 pour calculer le hachage des données ce n'est pas nécessairement un multiple de 8 bits. Voir les méthodes dont les noms sont SHA*FinalBits(...).