Являются ли хэш-значения глобально уникальными - PullRequest
1 голос
/ 24 марта 2010

Я хочу сгенерировать хеш-код для файла. Используя C #, я бы сделал что-то вроде этого и сохранил бы значение в базе данных.

byte[] b = File.ReadAllBytes(@"C:\image.jpg");
string hash = ComputeHash(b);

Теперь, если я использую, скажем, программу Java, которая реализует тот же алгоритм хеширования (Md5), могу ли я ожидать, что значения хеш-функции будут равны значению, сгенерированному в C #? Что если я выполню Java-программу из разных сред, Windows, Linux или Mac?

Ответы [ 5 ]

8 голосов
/ 24 марта 2010

Значения хеша не являются глобально уникальными.Но это не то, о чем вы действительно спрашиваете.

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

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

1 голос
/ 24 марта 2010

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

1 голос
/ 24 марта 2010

Я бы предложил использовать общий / принятый алгоритм хеширования, такой как MD5, для достижения тех же значений хеш-функции.

1 голос
/ 24 марта 2010

Значения Havh, сгенерированные из одного и того же входа и с использованием одного и того же алгоритма, определены как равные. 1 + 1 = 2, независимо от языка программирования, на котором я это программирую.

В противном случае интернет вообще не работал бы, вы знаете.

0 голосов
/ 24 марта 2010

Хотел бы я прокомментировать это, но у меня недостаточно репутации, чтобы сделать это.

Хотя я не знаю, для каких целей вы хотите использовать алгоритм хеширования, я хотел бы сказать, что для MD5 были найдены некоторые коллизии, поэтому он может быть менее «безопасным» (ну, мы, вероятно, не скажем "сломан", так как эти столкновения трудно вычислить). То же самое относится и к алгоритму SHA-1.

Больше информации здесь: http://www.mathstat.dal.ca/~selinger/md5collision/

Так что, если вы хотите использовать алгоритм хеширования в целях безопасности, вы можете взглянуть на SHA-256 или SHA-512, которые на данный момент сильнее.

В противном случае вы можете продолжать использовать MD5.

Мои два цента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...