В нашем приложении нам нужна ассоциативная операция между двумя UUID. Для других нужд приложения, таких как некоммутативность (A + B != B + A
) и обратимость ((A + B) - B = A
), кодирование / декодирование AES отлично работает как оператор, представленный здесь знаками +
/ -
, где A
играет роль открытого текста, а B
будет key
.
Поскольку безопасность здесь не является целью, AES кажется излишним, помимо проблемы неассоциативности. Существует ли какая-либо ассоциативная операция (побитовая, целочисленная арифметика c), которая могла бы заменить AES, сохраняя свои приятные свойства некоммутативность и обратимость , а также сохраняя свою (низкую) частоту столкновений для разных пар (A, B)
?
Для наглядности это вывод некоторых операций с конкретными значениями:
In [34]: from mypkg.mymodule.encoders import UUID
In [35]: a = UUID(b'asdasdasdasdasda'); a
Out[35]: cYÖe0Þót9jÞÖYILßjWÂ
In [36]: b = UUID(b'sdasdasdasdasdas'); b
Out[36]: jeÑaÐþOölÝRKÍHýzÐÓç
In [37]: c = UUID(b'dasdasdasdasdasd'); c
Out[37]: dp1pêÛçjWCsêäEhÜ8í5
In [38]: (a + b) + c
Out[38]: ïfDdéÄÆæImúËöÓtzÊgø
In [39]: a + (b + c)
Out[39]: lÏáÜIswæîÊá37ôrÔ4på
In [40]: (a + b) + c == a + (b + c) # A `True` value is desired here.
Out[40]: False