Я пытаюсь закодировать SHA256 с нуля, чтобы понять его реализацию на основе псевдокода вики, поскольку он достаточно ясен. Но у меня возникают проблемы с вычислением W[i] для первого блока. Я уверен, что где-то у меня отсутствует логика. Учитывая строку данных размером 80 байт (в шестнадцатеричном формате): "02000000aaf8ab82362344f49083ee4edef795362cf135293564c4070000000000000000c009bb6222e9bc4cdb8f26b2e8a2f8d163509691a4038fa692abf9a474c9b21476800755c02e17181fe6c1c3"
После заполнения получается строка данных размером 128 байт (в шестнадцатеричном формате):
"02000000aaf8ab82362344f49083ee4edef795362cf135293564c4070000000000000000c009bb6222e9bc4cdb8f26b2e8a2f8d163509691a4038fa692abf9a474c9b21476800755c02e17181fe6c1c3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280"
Теперь это разделено на 2 куска по 64 байта каждый:
"02000000aaf8ab82362344f49083ee4edef795362cf135293564c40700000000000000000c009bb6222e9bc4cdb8f26b2e8a2f8d163509691a4038fa692abf9a4"
"74c9b21476800755c02e17181fe6c1c3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002"
Теперь, когда мы начинаем обрабатывать первый фрагмент, как мы заполняем массив расписания сообщений с 64 элементами w[0..63] из 32-битных слов. Вики говорит:
«(Начальные значения в w[0..63] не имеют значения, поэтому многие реализации обнуляют их здесь)»
скопировать фрагмент в первые 16 слов w[0..15] массива расписания сообщений
Поэтому я пытаюсь заполнить массив расписания сообщений следующим образом:
Вт[0]=0200
Вт[1]=0000
W[2]=aaf8
W[3]=ab82
W[4]=3623 и так далее до W[15].
Все значения от W[16] до W[63] равны 0.
Но эти значения кажутся неверными. Что я делаю неправильно здесь. Может кто-нибудь указать, что здесь не так?