什么叫不可逆的算法?
下面的代码是 MySQL4 中 PASSWORD() 函数的核心算法,是不可逆的。
我水平太差,无法理解不可逆这个概念,哪位叔叔阿姨能解释一下,
或者给出下面算法的反函数就更好了。
typedef unsigned long ulong; /* Short for unsigned long */
void hash_password(ulong *result, const char *password)
{
register ulong nr=1345345333L, add=7, nr2=0x12345671L;
ulong tmp;
for (; *password ; password++)
{
if (*password == ' ' || *password == '\t')
continue; /* skipp space in password */
tmp= (ulong) (uchar) *password;
nr^= (((nr & 63)+add)*tmp)+ (nr << 8);
nr2+=(nr2 << 8) ^ nr;
add+=tmp;
}
result[0]=nr & (((ulong) 1L << 31) -1L); /* Don't use sign bit (str2int) */;
result[1]=nr2 & (((ulong) 1L << 31) -1L);
return;
}
送入password 字符串,返回两个无符号的长整形密文。
密文输出方式通常如下:
ulong hash_res[2];
hash_password(hash_res,"hedane");
sprintf(to,"%08lx%08lx",hash_res[0],hash_res[1]);