【发布时间】:2015-08-16 03:36:45
【问题描述】:
我有以下哈希算法:
unsigned long specialNum=0x4E67C6A7;
unsigned int ch;
char inputVal[]=" AAPB2GXG";
for(int i=0;i<strlen(inputVal);i++)
{
ch=inputVal[i];
ch=ch+(specialNum*32);
ch=ch+(specialNum/4);
specialNum=bitXor(specialNum,ch);
}
unsigned int outputVal=specialNum;
bitXor 只是进行 Xor 操作:
int bitXor(int a,int b)
{
return (a & ~b) | (~a & b);
}
现在我想找到一个算法,当给定 outputVal 时,可以生成一个“inputVal”。(生成的 inputVal 可能不一定与原始 inputVal 相同。这就是我想要发现碰撞)。 这意味着我需要找到一个算法来生成一个解决方案,当输入上述算法时,结果与指定的“outputVal”相同。 要生成的解的长度应小于或等于32。
【问题讨论】:
-
您确实知道编写了许多散列函数,因此获取原始值非常困难,因为这通常是一种加密技术(尽管散列函数更复杂)。
-
您意识到您的哈希函数只返回适合 int 范围的值?
-
由于birthday paradox,查找 a 冲突并不难。然而,找到一个与另一个 fixed 值给出相同哈希值的值将很难,并且与计算所有整数的哈希码相当
-
@gasher729,是的,所有计算的值都适合 unsigned int
-
@Ivaylo 冲突意味着对于两个不同的输入值,哈希函数的结果是相同的。对吧?这就是我要问的问题。
标签: c++ algorithm hash reverse-engineering hash-collision