Когда в программе SHA-1 вы добавляете значение 0x80 (в шестнадцатеричном представлении это 10000000 в двоичном), это на самом деле соответствует добавлению "единичного бита", но не в том смысле, что вы добавляете только один бит. Вместо этого 0x80 представляет 8 бит в форме одного байта, где старший бит равен 1, а все остальные биты равны 0.
Вот как происходит процесс добавления единичного бита и заполнения нулями:
1. **Добавление "1"**:
- В SHA-1 вы добавляете бит "1" в конец сообщения. Поскольку данные обрабатываются побайтово (в виде байтов), то для добавления этого единственного бита "1" вы добавляете байт с битовой маской 0x80. Это добавляет "1" в старшие 8 бит, что удобно для обработки данных.
2. **Дополнение нулями**:
- После добавления первого бита "1" (в виде 0x80) вы продолжаете добавлять нули, пока общее количество бит не станет равным 448 по модулю 512. То есть вы добавляете байты с нулями (0x00) до тех пор, пока общая длина сообщения не станет кратной 512 минус 64 бита, что позволяет добавить длину оригинального сообщения (64 бита) в конце.
Таким образом, 0x80 фактически добавляет первый бит "1", и далее, с помощью добавления нулей, вы подготавливаете сообщение к дальнейшему шагу, где будет добавлена длина оригинального сообщения.
Для ясности:
- Добавление 0x80 = добавление одного единичного бита + 7 нулей (вот что имеется в виду под "добавление одного бита").
- Затем производится дополнение нулями (0x00), чтобы достичь нужной длины сообщения.
В результате соблюдается требование, что общее сообщение имеет длину, кратную 512 бит, с необходимым количеством битов, которые будут включены в финальный процесс хеширования.