【发布时间】:2023-03-20 21:25:01
【问题描述】:
是否可以解密彼得温伯格的哈希算法?
我正在尝试编写自己的加密解密函数。我理解哈希值意味着您不能或不应该解密哈希值的概念,但我认为因为算法相对简单,在这种情况下可能可以解密这种哈希值。我已经完成了使用简单旋转的简单加密解密,现在我想尝试一些更困难的事情。
那么是否有可能解密由 Peter Weinberger 的哈希算法产生的哈希值?
以下加密函数是Peter Weinberger的精确哈希算法,解密是我自己的尝试,它不起作用:
int encrypt(char *s)
{
/* Peter Weinberger's */
char *p;
unsigned int h, g;
h = 0;
for(p=s; *p!='\0'; p++){
h = (h<<4) + *p; printf("Step : ");
if (g = h&0xF0000000) {
h ^= g>>24;
h ^= g;
}
}
return h % 211;
}
std::string decrypt(int v)
{
/* Peter Weinberger's */
unsigned int h, g;
h = 0;
v /= 211;
int s = sqrt(v);
/* Not sure what to do here
for(p=s; *p!='\0'; p++){
}
*/
return string(h);
}
【问题讨论】:
-
"是否可以解密 [任何] 哈希算法?" - 如果散列后的位数更少,则不会。这简直是愚蠢的......
-
@MitchWheat 我不确定 Peter Weinbergers 算法是否会导致散列后的位数减少?是吗?
-
你从一个任意长度的字符串开始,然后返回一个 int。这“少了很多”!
-
你如何定义“解密”?取回原始输入,还是获得一些散列到给定值的输入?第二个称为 first-pre-image,第一个仅在特殊情况下才有可能。
标签: c++ encryption hash cryptography