Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Алгоритм SHA


Автор: Shit_happenes 29.11.2007, 14:19
Вот такая вот задачка :

Цитата


    Шаг 1: добавление недостающих битов

Сообщение добавляется таким образом, чтобы его длина была кратна 448 по модулю 512 (длина 448 mod 512). Добавление осуществляется всегда, даже если сообщение уже имеет нужную длину. Таким образом, число добавляемых битов находится в диапазоне от 1 до 512.

Добавление состоит из единицы, за которой следует необходимое количество нулей.

    Шаг 2: добавление длины

К сообщению добавляется блок из 64 битов. Этот блок трактуется как беззнаковое 64-битное целое и содержит длину исходного сообщения до добавления.

Результатом первых двух шагов является сообщение, длина которого кратна 512 битам.


Помогите разобрать с длинной сообщения, что имеется в виду?
И как вычислить эту длину? 
А потом ещё как дополнить это сообщение?

Автор: Walker 29.11.2007, 14:31
Приветствую!

Реализацию писать не буду, только отвечу на вопросы. Требование: все сообщения инкапсулированы в пакеты размера, кратного 512 бит, из которых последние 64 бита - содержат длину передаваемого сообщения. Оставшиеся 448(для самого короткого пакета) бит заполняются следующим образом: сообщение, затем 1, затем нули. Схематически что-то вроде этого:

Код

 Сообщение1000...0            Длина сообщения
|-----------------|--------------------------|
      448 бит                64 бит


Да, ещё. Если сообщение "зашкаливает", то дополняется по этой схеме до 512 * 2 (3, 4....n - в зависимости от длины) бит.

Автор: Shit_happenes 29.11.2007, 20:09
Это я понял.

Входящее сообщение будет в виде
Код


String str = "MessageText"
 ?
Т.е. в данном случае, если используется кодировка один байт на символ, то длинна этого сообщения будет равна str.Length * 8 бит?
11 * 8 = 88бит,
Значит надо дополнить до 512бит - 64бита, т.е. получиться 
Код


String newStr = "(длинна в 8символов)" + "                         "  + "(1 по таблице ascii)" + str;

Так что ли?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)