Что такое хэш SHA-256 одного бита "1"? - PullRequest
11 голосов
/ 12 декабря 2010

Определение SHA-256, по-видимому, таково, что вход, состоящий из одного бита "1", имеет четко определенное хеш-значение, отличное от значения байта "01" (поскольку заполнение выполняется на основе длины ввода в битах.

Однако из-за проблем с порядком байтов и того факта, что никакие реализации, которые я могу найти, не поддерживают подачу в единичных битах, я не могу понять, каково это правильное значение.

Итак, что является правильным хешем 1-битного длинного входа, состоящего из бита "1"? (не 8-битный байтовый ввод [] {1}).

Ответы [ 3 ]

10 голосов
/ 12 декабря 2010

ОК, согласно моей собственной реализации:

1-битная строка "1" :

B9DEBF7D 52F36E64 68A54817 C1FA0711 66C3A63D 384850E1 575B42F7 02DC5AA1

1-битная строка "0" :

BD4F9E98 BEB68C6E AD3243B1 B4C7FED7 5FA4FEAA B1F84795 CBD8A986 76A2A375

Я протестировал эту реализацию на нескольких стандартных входах, кратных 8 битам, включая строку 0 бит, и результаты были правильными.

(разумеется, цель этого вопроса состояла в том, чтобы сначала проверить вышеприведенные результаты, поэтому используйте с осторожностью ...)

3 голосов
/ 12 декабря 2010

Не уверен, правильно ли я понимаю ваш вопрос.

SHA-256 работает с размерами блоков 64 байта (= 512 бит). Это означает, что меньшие входы должны быть дополнены в первую очередь. Результат заполнения выглядит так:

For Bit 1:    1100000000000...00000000001
For Bits 01:  0110000000000...00000000010

Поскольку эти результаты различны, результаты следующих функций сжатия также будут. И, следовательно, значения хеш-функции. Стандартный документ объясняет заполнение довольно наглядно: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf

2 голосов
/ 12 декабря 2010

Существует код C, доступный в разделе 8 из RFC 4634 для вычисления хеша данных, который не обязательно кратен 8 битам.Посмотрите методы, имена которых SHA*FinalBits(...).

...