【发布时间】:2015-05-13 22:11:31
【问题描述】:
似乎 Java 的 HashMap 实现 总是 将键放置在相同的 bin 中(至少我在整数键中看到了这一点)。 IE。散列是确定性的,在所有运行中它产生相同的值。
我听说某些语言会随机插入,因此出于安全原因,密钥将存储在哪个存储桶中是不可预测的。
为什么 Java 的键总是一样的?
【问题讨论】:
-
大概是因为 HashMap 没有针对安全性进行优化? (FWIW,我对桶随机化如何提高安全性很感兴趣。)
-
@OliverCharlesworth:我不知道任何 Web 应用程序使用的 java 的另一种 hashmap 实现(仅出于性能原因不同)
-
@OliverCharlesworth:所以不应该所有的哈希图都是随机的吗?
-
@OliverCharlesworth 它可以防止某些类别的 DoS 攻击;如果攻击者可以为您提供所有哈希到同一个存储桶的密钥,那么他们可以使您的代码运行缓慢。
-
我不会为此使用
HashMap,它不是为此目的而创建的... ¿为什么不随机创建密钥?出于您的安全原因,哈希将是可以的...
标签: java security hash collections hashmap