Haskell 具有冲突哈希的值

Haskell 具有冲突哈希的值,haskell,Haskell,我需要测试一个算法,它围绕函数展开。因为散列冲突是很难再现的,所以我需要一些已知会发生冲突的值。那么,是否存在任何已知的相同类型的冲突值?根据@bennofs的建议,这里有一个人工实例,其中一个哈希值与半个Word8值范围冲突 newtype CollidingValue = CollidingValue Word8 deriving (Eq, Show) instance Hashable CollidingValue where hashWithSalt salt (Collidi

我需要测试一个算法,它围绕函数展开。因为散列冲突是很难再现的,所以我需要一些已知会发生冲突的值。那么,是否存在任何已知的相同类型的冲突值?

根据@bennofs的建议,这里有一个人工实例,其中一个哈希值与半个
Word8
值范围冲突

newtype CollidingValue = CollidingValue Word8
  deriving (Eq, Show)

instance Hashable CollidingValue where
  hashWithSalt salt (CollidingValue w) =
    if w > edge
      then hashWithSalt salt (w - edge)
      else hashWithSalt salt w
    where
      edge = 128

你为什么不去下载一本字典,然后进行冲突呢?你的算法在数据类型的选择上是多态的吗?在这种情况下,您可以创建一个始终返回某个常量的“伪”散列实例。如果这不起作用,你可以使用@bennofs,这是个好主意!)非常感谢。在最新的
hashable
(1.2.2.0)中,整数类型基本上是散列到它们自己的,而salt也很薄(请参阅源代码中的
combine
),因此很容易找到冲突(这可能不是您喜欢的…。@BenjaminKovach以及几乎所有基于散列的算法,在哈希冲突的情况下,地雷检查值是否相等。因此,向它提供相同的值不会测试执行分支,因为执行分支可以容纳相等的散列和不相等的值。