Titlul întrebării (acum) întreabă „Care sunt primii biți dintr-un șir de biți”. Acest lucru nu este ambiguu dacă biții sunt prezentați individual într-o ordine cronologică sau în scris într-un context în care există o ordine convențională de citire, cum ar fi de la stânga la dreapta.
Dar corpul întrebării este despre „un șir care generează din sha256”. Acesta trebuie citit ca SHA-256, definit de FIPS 180-4. Este un algoritm care scoate un „șir de biți” de $256$ biți și nu sunt identificabili imediat.
Corpul întrebării are x =
urmat de $64$ caractere din toate fie cifre, fie litere A
la f
(în litere uniforme, aici litere mici), adică $16=2^4$ personaje. Asta sugerează că rezultatul SHA-256 este codificat hexazecimal, cu fiecare caracter codând 4 biți (notă $256=64\times4$). Aceasta este una dintre mai multe reprezentări comune ale șirurilor de biți ca caractere.
Există mai multe moduri diferite și incompatibile de a converti hexazecimal în biți, dar, din fericire, în cazul SHA-256, una este specificată în 3.1 subparagraful 2 din pagina marcată 7 din FIPS 180-4 (de citit obligatoriu). În rezumat, cei mai importanți biți sunt primii, fie la nivelul nibble (4 biți), octet (8 biți) sau cuvânt (32 biți în cazul SHA-256).
Astfel pentru a găsi primul $i$ biți pentru hash-ul SHA-256 dat, putem
Acest lucru se aplică tuturor hashurilor din familia SHA (înlocuind $256$ cu lăţimea lor de ieşire). În absența altor specificații, este rezonabil să o aplicați altor hash-uri standard, a căror lățime de ieșire este un multiplu de $32$ (sau chiar $8$ sau $4$) biți. Acest lucru este discutabil pentru MD5, deoarece folosește puțin-endian convenție în ordinea octeților în cadrul a $32$-bit cuvânt.Și nu l-aș extinde orbește la alte cantități utilizate în criptografie și reprezentate, de asemenea, în hexazecimal, cum ar fi numerele întregi așa cum sunt utilizate în RSA.