Реализация SHA-256 C# (Не методами .NET)
где как бы приведен псевдокод, но при чем тут RSA?
Так тем более что не получается то?
http://clck.ru/d/NYwPGqcf14buU
Никак не разберусь какие методы здесь делают:
m := message ǁ [единичный бит]
m := m ǁ [k нулевых бит], где k — К наименшее неотрицательное число, такое что
( L + 1 + K ) mod 512 = 448, где L- число бит в сообщении (сравнима по модулю 512 c 448)
m := m ǁ Длина(message) — длина исходного сообщения в битах в виде 64-битного числа
с порядком байтов от старшего к младшему
и
Далее сообщения обрабатывается последовательными порциями по 512 бит:
разбить сообщение на куски по 512 бит
для каждого куска
разбить кусок на 16 слов длиной 32 бита: w[0..15]
m := message ǁ [единичный бит]
m := m ǁ [k нулевых бит], где k — К наименшее неотрицательное число, такое что
( L + 1 + K ) mod 512 = 448, где L- число бит в сообщении (сравнима по модулю 512 c 448)
m := m ǁ Длина(message) — длина исходного сообщения в битах в виде 64-битного числа
с порядком байтов от старшего к младшему
К сообщению добавляем 1 бит 1 (единица), дополняем нулевыми битами (0) так чтобы длина сообщения (бит) по модулю 512 была 448. Добавляем в сообщение его длину.
f.e.:
Исходное сообщение
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' (длина 440 (55*8) бит)
двоичное представление:
'01000001 01000001 01000001 01000001 .... 01000001'
добавляем в конец 1.
'01000001 01000001 01000001 01000001 .... 01000001 1' длина 441
добавляем в конец нули чтобы получилась длина 448 по модулю 512 (448 , 512+448 , 1024+448...) короче выравниваем до 512 бит, но чтоб осталось место под длину сообщения.
'01000001 01000001 01000001 01000001 .... 01000001 10000000' длина 448
добавляем в конец длину исходного сообщения (64 бита).
'01000001 01000001 01000001 01000001 .... 01000001 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 10111000' длина 512