Я пытаюсь понять алгоритм SHA2-512, поэтому я после этого документа который имеет промежуточные значения для строки «abc». В т=0
, значения для ф
, час
и г
являются прямыми. Но я не получаю такое же значение для е
, что говорит о том, что я делаю что-то не так, когда вычисляю $T_1 = h + \Sigma_1(e) + \text{Ch}(e,f,g) + K_i + W_i$. Я почти уверен, что реализовал $\text{Ч( )}$ и $\Sigma_1 ( )$ правильно. Я предполагаю, что моя проблема может быть связана с добавлением более $\pмод {2^{64}}$. Я понимаю каждый термин в сумме $T_1$ является 64-битным числом. Поэтому я предполагаю, что мы можем преобразовать эти числа в целые числа и сложить их по $\pмод {2^{64}}$. Теперь результирующее число может быть не 64-битным в двоичном формате. мы добавляем $0$перед двоичным представлением, чтобы сделать его 64-битным?
Я не уверен, что это полезно, но вот несколько значений, которые я получаю в двоичном формате для т=0
(сейчас я добавляю нули слева от старшего бита):
#Сигма_1(д)
01010001000011100101001001111111110101101111001101000001011010001
#Ч(д,е,г)
0001111110000101110010011000110001111011001001110011110100111011
#T_1
0110100101100101001100111001100011001110110101111110100010100000
#e <- T_1 + d
0000111010110101001010001101001100101101111101010001111110010001
тогда как согласно документу е
в двоичном формате 1100001111010100111010111111110101001000011001010000111111111010
.
Если вы можете предоставить ресурс, который включает промежуточные значения для этих других функций, я надеюсь, что смогу понять это. В противном случае, было бы весьма признательно, если бы вы могли дать подробное объяснение того, как получить правильное значение. Пожалуйста, дайте мне знать, если вы хотите, чтобы я включил больше информации.