相关疑难解决方法(0)

由非随机哈希函数引起的应用程序漏洞

以下摘录来自一篇解释由于哈希数据结构中使用的非随机哈希函数而导致拒绝服务(DoS)攻击的可能性的文章.

[...]可以通过利用底层散列算法中的可预测冲突来利用条件.

为了验证它,我经历了Oracle的Java HashMap的参考实现,并且确实发现了一个使用的静态哈希函数:

    static int hash(int h) {
       h ^= (h >>> 20) ^ (h >>> 12);
       return h ^ (h >>> 7) ^ (h >>> 4);
    }
Run Code Online (Sandbox Code Playgroud)

关于该主题的另一篇论文说:

Tomcat 6.0.32服务器在大约44分钟的i7 CPU时间内解析2 MB的冲突密钥串,因此大约6 kbit/s的攻击者可以使一个i7核心不断忙碌.如果攻击者有千兆连接,他可以保持大约100.000个i7核心忙

我们如何防范此漏洞.此外,对于许多软件,我们使用的是依赖于此实现的开源(Tomcat等).

java security ddos

33
推荐指数
2
解决办法
1万
查看次数

所有JVM /系统中的Java,Object.hashCode()结果常量?

Object.hashCode()在同一个对象的所有JVM实现上,required 的输出是否相同?

例如,如果"test".hashCode()返回11.4,它是否可能2在1.6上返回运行.或者如果操作系统不同,或者实例之间存在不同的处理器架构,该怎么办?

java hashcode

7
推荐指数
2
解决办法
7466
查看次数

Java和string.hashCode()在群集中的计算机之间的稳定性

我也问过类似的问题string.GetHashCode()在.NET方法.从那时起,我了解到如果我们要在不同的机器上使用它,我们就不能依赖于buit-in类型的哈希代码的隐式实现.因此,我假设Java实现String.hashCode()在不同的硬件配置中也不稳定,并且可能在VM之间表现不同(不要忘记不同的VM实现)

目前,我们正在讨论一种通过散列将字符串安全地转换为Java中的数字的方法,但是散列算法必须在群集的不同节点之间保持稳定,并且要快速评估,因为使用频率很高.我的队友坚持使用原生hashCode方法,我需要一些合理的论据让他们重新考虑另一种方法.目前,我能想到的唯一的机器配置之间(x86和x64)的JVM可能不同的厂商对某些机器(几乎适用于我们的情况下)和字节顺序不同的差异,根据不同的算法是在机器上跑.当然,也可以考虑字符编码.

虽然所有这些事情都浮现在我脑海中,但我并不是百分之百肯定他们中的任何一个都有足够的理由,我很感激你在这方面的专业知识和经验.这将有助于我建立更强大的论据,以支持编写自定义哈希算法.另外,我很欣赏有关实施时不应该做的建议.

java hashcode cluster-computing

6
推荐指数
1
解决办法
2967
查看次数

字符串的哈希码对于整个应用程序是否相同?

我正在开发一个基于Hashing的程序.我的问题是,字符串的HashCode对于整个应用程序将保持不变.

我问这个的原因是因为,Mecached服务器内部的KetamaMemcachedSessionLocator以这种方式工作如果有两个运行Memcache的服务器,我想从特定服务器找到一个密钥.

String key = "MyString";
int keyid = key.hashCode();
int v = keyid % 1;  //( I assume that this will contact the First Server to retrieve that value )
int v = keyid % 2;  //( I assume that this will contact the Second Server to retrieve that value )
String value = MemcachedClient.get(key, v);
Run Code Online (Sandbox Code Playgroud)

其次是基于本网站实施上述内容

http://dev.mysql.com/doc/refman/5.0/en/ha-memcached-using-hashtypes.html

如果您发现上述方式有问题,请分享您的意见.

java

5
推荐指数
1
解决办法
1033
查看次数

在Java中散列密钥

在java中,当我使用String作为Hashmap的键时,我得到的结果与我在HashMap中使用字符串hashcode作为键时的结果略有不同.

任何见解?

java hashtable hashmap string-hashing

5
推荐指数
1
解决办法
1万
查看次数

是否预先计算了java中的String hashCode?

在我说Java的时候.

String str= "abcd";
str.hashCode(); 
Run Code Online (Sandbox Code Playgroud)

我的问题是什么时候计算Hashcode?@第1行或@第2行?

我假设,哈希码是预先计算的.每当更新字符串时,哈希码也可能"更新".

或者它的另一种方式,即每当你调用str.hashCode()java时,使用这里描述的公式计算它.

Java字符串上hashCode()的一致性

java hashcode

4
推荐指数
2
解决办法
1650
查看次数

Java字符串哈希码是否独立于区域设置?

Java String.hashcode()完全独立于Locale吗?换句话说,如果有人摆弄默认值Locale,我们是否100%确定这不会影响哈希码?

我们知道这种小小的影响toUpperCase()toLowerCase().

java locale hashcode

3
推荐指数
1
解决办法
502
查看次数

String hashCode():总是相同的结果?

这个问题的答案很好地解释了Java的情况。我想知道Android的情况如何。具体来说:

问题1:对于给定的字符串,哈希码总是相同吗?(更具体地说,每次打开应用程序时,我需要给定字符串的哈希码在用户手机上保持相同)。

我在谷歌上搜索了 android 的源代码String并找到了这个,但我正在玩火,因为我不知道有关 Android 源代码的第一件事,是否/何时被制造商修改等。

hashCode()问题 2:如果 1 的答案是否定的,那么我在自己的 hashCode() 函数中使用上面引用的源代码中的代码是否明智?

string android hashcode

3
推荐指数
1
解决办法
2362
查看次数

Hashcode值相同

为什么hashcode值相同?

public static void main(String args[])
{
    String s1="abc";
    String s2=new String("abc");
    System.out.println("Hashcode s1-:"+ s1.hashCode());
    System.out.println("Hashcode s2-:"+ s2.hashCode());
    if(s1==s2){
        System.out.println("==true:");
    } 
}
Run Code Online (Sandbox Code Playgroud)

产量

Hashcode s1-:96354
Hashcode s2-:96354
Run Code Online (Sandbox Code Playgroud)

java

0
推荐指数
1
解决办法
650
查看次数