Răspuns scurt;
Amesteci funcția de compresie și funcția hash. Ambele pagini/biblioteci sunt adevărate în contextul lor!
Răspuns extins
SHA-256, ca și ceilalți algoritmi hash, este întotdeauna captusit și este definit în NIST.FIPS.180-4
Să presupunem lungimea mesajului $M$, în bucăți, $\ell$ este biți. Adăugați bitul 1
până la sfârșitul mesajului, urmat de k
zero biți, unde k
este cea mai mică soluție nenegativă a ecuației
$$\ell +1 + k \equiv 448 \bmod 512$$ Apoi adăugați blocul de 64 de biți care este egal cu numărul $\ell$ exprimată folosind o reprezentare binară
Deci 512 biți zerouri în SHA-256 vor avea 447 zerouri ($k$ parte);
$$\text{Padded_Message} =\underbrace{\texttt{000...00}}_{512-zero}||\texttt{1}||\underbrace{\texttt{000...00}}_ {447-zero}||\underbrace{\texttt{codare lungă}}_{64 de biți}$$
Dacă doriți cu adevărat să testați unele intrări, asigurați-vă că acestea sunt corecte pe vectorii de testare ai NIST definiți în Programul de validare al algoritmului criptografic - Funcții hash
Pentru căptușeală, ca de obicei, nu are legătură cu utilizatorul. Bibliotecile se ocupă de umplutura pentru utilizatori.
Deoarece este exact 512 biți, nu există nicio divizare și nici o umplutură. Dar de la calculatoare online sau cod golang, aș obține hash-ul sha-256 al intrării nule să fie:
După cum am menționat mai sus, umplutura este întotdeauna definită. Face parte din algoritmul hash SHA-256.
Intrarea dvs. nu este intrare nulă, este intrare zero pe 512 biți. NIST furnizează vectorul de testare lungime zero și rezultatul acestuia
Len = 0
Mesajul = 00
MD = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Testarea aportului dvs. pe sha256algorithm.com produce
f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b
Am testat această pagină și pe niște vectori de testare NIST.
Link-ul pe care îl furnizați ca SCALA MAMBA menționează ca;
Ieșire: înlănțuirea valorilor după comprimarea blocului de intrare (în același format în care ar fi returnat rezumatul)
IMPORTANT: Aceștia NU sunt vectori de testare pentru funcția hash completă SHA-256, deoarece regulile de umplutură sunt ignorate
Aceasta este ieșirea primei funcție de compresie. Acest lucru poate fi verificat pe sha256algorithm.com dacă te oprești pe treapta 164. Pune mouse-ul pe valorile inițiale și vei obține valoarea hexadecimală;
da5698be17b...
Acesta este același lucru pe celălalt link către; dat ca vectori de test de compresie sha256.
Amintiți-vă că rezultatul funcției de compresie este valoarea inițială a următoarei funcții de compresie, dacă este necesar. Dacă nu este necesar, atunci este rezultatul SHA-256. Sunt date primele valori inițiale;
Aceste cuvinte reprezintă primii treizeci și doi de biți ai părților fracționale ale rădăcinilor cubice ale primelor șaizeci și patru de numere prime
ca nimic-în sus-în-măneca-numărul-meu deși acest lucru este psihologic.