Încerc să codific SHA256 de la zero pentru a înțelege implementarea sa pe baza pseudocodului wiki, deoarece este suficient de clar. Dar am probleme cu calculul lui W[i] pentru primul bloc. Sunt sigur că îmi lipsește logica undeva. Dat un șir de date cu dimensiunea de 80 de octeți (în hexadecimal): "02000000aaf8ab82362344f49083ee4edef795362cf135293564c4070000000000000000c009bb6222e9bc4cdb8f26b2e8a2f8d163509691a4038fa692abf9a474c9b21476800755c02e17181fe6c1c3"
După completare, rezultă șirul de date de 128 de octeți (în hex):
"02000000aaf8ab82362344f49083ee4edef795362cf135293564c4070000000000000000c009bb6222e9bc4cdb8f26b2e8a2f8d163509691a4038fa692abf9a474c9b21476800755c02e17181fe6c1c3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280"
Acum, acesta este împărțit în 2 bucăți de 64 de octeți fiecare:
"02000000aaf8ab82362344f49083ee4edef795362cf135293564c4070000000000000000c009bb6222e9bc4cdb8f26b2e8a25900000000000c009bb6222e9bc4cdb8f26b2e8a25900000000000"
"74c9b21476800755c02e17181fe6c1c38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
Acum, când începem procesarea primei bucăți, cum populăm matricea de planificare a mesajelor cu 64 de intrări w[0..63] de cuvinte pe 32 de biți. Wiki spune:
„(Valorile inițiale din w[0..63] nu contează, atât de multe implementări le zero aici)”
copiați o bucată în primele 16 cuvinte w[0..15] din matricea de planificare a mesajelor
Deci, încerc să populez matricea de planificare a mesajelor după cum urmează:
W[0]=0200
W[1]=0000
W[2]=aaf8
W[3]=ab82
W[4]=3623 și așa mai departe până la W[15].
Valorile W[16] la W[63] sunt toate setate la 0.
Dar aceste valori par incorecte. Ce greșesc aici. Poate cineva să indice ce este în neregulă aici?