Если кто-то может хотя бы частично изменить содержимое некоторых файлов XML, и что у кого-то есть преимущество в том, чтобы вы объявляли два файла XML (или выдержки XML) идентичными, хотя на самом деле это не так, тогда вам необходимо криптографическибезопасная хеш-функция, а именно та, которая устойчива к столкновениям .Столкновение - это пара отдельных сообщений (последовательностей байтов), которые выдают одинаковый хэш-результат - именно то, чего вы хотели бы избежать.Поскольку хеш-функция принимает входные данные длиннее своего выходного сигнала, конфликты обязательно существуют;хеш-функция считается криптографически безопасной, когда никто на самом деле не может создать такую коллизию.
Если хеш-функция выдает n бит, то можно ожидать, что коллизия найдетсяпосле хеширования около 2 n / 2 различных сообщений.Безопасная хеш-функция - это хеш-функция, так что не известно ни одного метода, позволяющего получить столкновение быстрее, чем это.
Если нет проблемы безопасности (то есть никто не будет активно пытаться найти столкновение, вы просто боитесь столкновенияне повезло), тогда криптографически слабые хеш-функции являются опцией, при условии, что они имеют достаточно большой вывод, так что 2 n / 2 остается намного больше, чем ожидаемое числоXML-файлы вы будете сравнивать.Для n = 128 (т. Е. 2 n / 2 , близких к восемнадцати миллиардам миллиардов), MD5 отлично, быстро и широко поддерживается.Вы можете исследовать MD4 , который еще слабее, но немного быстрее.Если вы хотите больший n , попробуйте SHA-1 , который предлагает 160-битные выходы (также, слабые стороны SHA-1 все еще являются теоретическими на данный момент, поэтому SHA-1 намногоменее «криптографически взломан», чем MD5).
Если у вас есть, даже потенциально, проблемы с безопасностью, тогда выберите SHA-256 .В настоящее время для этой функции не известно ни одного криптографического недостатка в отношении столкновений.Если у вас возникают проблемы с производительностью (что довольно маловероятно: на базовом ПК SHA-256 может обрабатывать более 100 мегабайт данных в секунду, поэтому есть вероятность, что синтаксический анализ XML будет значительно дороже, чем хеширование), рассмотрим SHA-512., что несколько быстрее на платформах, которые предлагают 64-битные целочисленные типы (но довольно медленно на платформах, которые этого не делают).
Обратите внимание, что все эти хеш-функции относятся к последовательностям байтов.Один перевернутый бит меняет вывод.В мире XML данный документ может быть закодирован различными способами, которые семантически идентичны, но различаются в том, что касается битов на проводе (например, é
и é
оба представляют один и тот же символ é
).Вам решать, какое понятие равенства вы хотите использовать;см канонический XML .