避免 HashMap 中的双重哈希?

问题描述 投票:0回答:1

我的键已经是我的值的 (blake3) 哈希值。

将值存储在 HashMap 中时,如何避免浪费这些键的重新散列?

rust hashmap
1个回答
0
投票

您可以定义

Hasher
的自定义实例,它使用 BLAKE3 值,但您需要将它们减少到
u64
,因为这是该特征使用的类型。您可以选择前 64 位或将输出异或在一起以产生一个值。

但是,请小心这一点,因为默认的 Rust 哈希表使用一个秘密密钥,该密钥会随机化值,以防止攻击者提供许多密钥,这些密钥都散列到同一个存储桶中,从而导致病态性能。如果您的数据不受信任,那么使用未加密的哈希就会产生安全问题(DoS 漏洞),即使是像 BLAKE3 这样的加密安全哈希。请注意,我们假设攻击者知道您的哈希方案是如何工作的(因为通常很容易弄清楚),因此这并不是对此类漏洞的有效防御。

© www.soinside.com 2019 - 2024. All rights reserved.