Скажем, у вас есть два хэша H(A)
и H(B)
, и вы хотите их объединить. Я читал, что хороший способ объединить два хэша - это XOR
их, например. XOR( H(A), H(B) )
.
Самое лучшее объяснение, которое я нашел, кратко описано здесь в этих хеш-функциях:
XORing двух чисел с грубо случайным распределением приводит к еще одному числу, все еще с грубо случайным распределением *, но которое теперь зависит от двух значений.
...
* На каждом бите двух чисел, которые нужно комбинировать, выводится 0, если два бита равны, иначе a 1. Другими словами, в 50% комбинаций будет выводиться 1. Поэтому, если два входных бита имеют примерно 50-50 вероятность быть 0 или 1, то так же будет и выходной бит.
Можете ли вы объяснить интуицию и/или математику за тем, почему XOR должно быть операцией по умолчанию для объединения хеш-функций (а не OR или AND и т.д.)?