2010-12-12 8 views
9

La definizione di SHA-256 sembra essere tale che l'ingresso costituito da un singolo bit "1" ha un valore hash ben definita, distinta da quella del "01" byte (poiché l'imbottitura è effettuata sulla base la lunghezza dell'input in bit).Che cos'è l'hash SHA-256 di un singolo bit "1"?

Tuttavia, a causa di problemi di endianness e del fatto che nessuna implementazione che posso trovare supporta l'alimentazione in bit singoli, non riesco a capire quale sia il valore corretto.

Quindi, qual è l'hash corretto di input 1-bit costituito dal bit "1"? (non l'input byte lungo 8 bit [] {1}).

+1

perché ???????????? –

+1

Potresti calcolarlo a mano: http://en.wikipedia.org/wiki/SHA-2#SHA-256_.28a_SHA-2_variant.29_pseudocode ma diventerebbe piuttosto noioso abbastanza velocemente. – MatrixFrog

+3

@dan: perché non ???????????? –

risposta

8

OK, secondo la mia realizzazione:

1-bit stringa "1":

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

1-bit stringa "0 ":

BD4F9E98 BEB68C6E AD3243B1 B4C7FED7 5FA4FEAA B1F84795 CBD8A986 76A2A375 

ho testato questa implementazione o n diversi input standard multipli di 8 bit, inclusa la stringa a 0 bit, ei risultati erano corretti.

(naturalmente il punto di questa domanda è stato quello di validare le uscite di cui sopra, in primo luogo, in modo da utilizzare con attenzione ...)

+1

Confermo questi valori. La mia implementazione di SHA-2 proviene da sphlib (http://www.saphir2.com/sphlib/). Il codice C gestisce gli ingressi con lunghezze non multiple di 8. –

+0

Grazie @Thomas, contrassegnerò ciò accettato poi. –

+0

Inoltre confermato dall'implementazione di Perl, che accetta le stringhe nella codifica binaria. –

2

Non sono sicuro di aver compreso correttamente la domanda.

SHA-256 funziona con dimensioni di blocco di 64 byte (= 512 bit). Ciò significa che gli input più piccoli devono essere prima riempiti. Il risultato del riempimento si presenta così:

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

come questa risultati sono distinti, i risultati delle seguenti funzioni di compressione sarà troppo. E quindi i valori hash sono. Il documento uniforme spiega l'imbottitura molto descrittiva: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf

+0

non solo SHA-256, non riesco a pensare ad alcun algoritmo che non riempie o ripetere piccoli input. –

+1

La dimensione del blocco per SHA256 è 512 bit, non 256 bit. Vedi RFC: 4634 "Algoritmi Hash Secure USA (SHA e HMAC-SHA)", http://www.ietf.org/rfc/rfc4634.txt –

2

C'è codice C disponibile in section 8 di RFC 4634 per calcolare l'hash dei dati questo non è necessariamente un multiplo di 8 bit. Vedi i metodi i cui nomi sono SHA*FinalBits(...).