我正在考虑的问题是散列函数,尽管我主要对描述所需属性的数学术语/背景感兴趣。
考虑以下情况:我有一个散列函数,其中包含一个秘密( S )和一个数字( X ),该数字会创建另一个数字( Y ):
Hash : S, X → Y
然后,我用自己的秘密( a 和 b )定义了两个不同的哈希函数:
H1(X) := Hash(a, X)
H2(X) := Hash(b, X)
我想要的属性是:
H1(H2(x)) = H2(H1(X))
(我认为这是功能通勤吗?)
从编程和数学思考后退一步,我们可以看看不同的运算。如果该函数仅包含一个操作,那么我很确定,如果该操作同时具有关联和交换属性,则将始终满足此属性。但是,有些操作对顺序不敏感但不可交换,例如师。我怎么知道我选择的哈希函数是否会使其通勤?
一些似乎可行的例子:
简单添加:
Hash(S, X) := S + X
按位异或:
Hash(S, X) := S xor X
模幂:
Hash(S, X) := X^S mod p
if S ∈ N and X ∈ Z
答案 0 :(得分:0)
我怎么知道我选择的哈希函数是否会使它上下班?
组成下的通气性是不寻常的性质。除非函数使用某些基础代数结构的可交换运算(例如“乘以x
”),否则这种情况并不常见。这是您的三个示例的形式。
实际的答案是“如果您没有证明它是可交换的,则假定它不是可交换的”。没有通用的算法可以为您提供证明。