2010-12-03 5 views
0

Я хочу создать уникальный идентификатор для устройства, поэтому я решил создать SHA1 (временная метка XOR timestamp XOR user_password). Есть ли проблемы безопасности, связанные с этим? Было бы лучше сделать SHA1 (mac CONCATENATE timestamp CONCATENATE user_password)?конкатенировать или «xor» ключи перед хешем, чтобы создать уникальный идентификатор?

Спасибо

ответ

3

Используйте конкатенацию - тогда вы будете основывать свой хэш все имеющихся исходных данных.

Если вы используете XOR, существует риск того, что одна часть ваших исходных данных «отменит» некоторые (или все) бит оставшихся данных до того, как она будет передана хэш-функции.

И конкатенация, а не XORing не повлияет на пространство, необходимое для хранения вашего хеша - генерируемый хэш SHA1 всегда будет 20 байтов независимо от размера ваших исходных данных.

+0

Спасибо, ладно, я предполагаю, что это «более» рискованно, но только очень немного рискованно, потому что даже если одна часть отменит данные других частей, sha1, по-видимому, создаст сильный хеш, я ошибаюсь ? – C2T38SN

+1

@ user529361: Проблема не в силе хеша, а в «уникальности» ваших исходных данных. Например, 'SHA1 (1^2^3)' == 'SHA1 (1^3^2)' == 'SHA1 (2^1^3)' == 'SHA1 (2^3^1)' = = 'SHA1 (3^1^2)' == 'SHA1 (3^2^1)', тогда как 'SHA1 (123)'! = 'SHA1 (132)'! = 'SHA1 (213)'! = ' SHA1 (231) '! =' SHA1 (312) '! =' SHA1 (321) 'и т. Д. И т. Д. – LukeH