什么叫不可逆的算法?

二师兄的老公 Erlang服务端  2004-04-30 03:11:12
下面的代码是 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]);

...全文
240 12 点赞 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wxpwxp 2004-05-08
up
  • 打赏
  • 举报
回复
感谢各位的金玉良言。
下面有种说法比较有意思:
http://www.503room.com/news_system/htmlnews/20031216/1860090248.html
  • 打赏
  • 举报
回复
zenithweng 2004-05-08
单向函数的概念是计算起来相对容易,但求逆却非常困难。也就是说,已知x,我们很容易计算f(x)。但已知f(x),却难于计算出x。在这里,“难”定义成:即使世界上所有的计算机都用来计算,从f(x)计算出x也要花费数百万年的时间 。
  • 打赏
  • 举报
回复
hxy2003 2004-05-08
不可逆就是如你忘了密码的话就是管理员,开发者也不知道它到底是设什么密码,不能从密码文中得到原始码罗。。。
  • 打赏
  • 举报
回复
XmagicX 2004-05-03
存在算法
密文=F(原文)
比如
F(原文)=原文^KEY
那么
密文^KEY=原文
这之类的话就属于可逆的算法
反之就是不能逆推出来原文的算法就是不可逆的算法了

关于上面的HASH单项散列,是不能逆的,如果不是发现漏洞的话只能暴力
  • 打赏
  • 举报
回复
neil78duan 2004-05-03
这个是加密的问题,不可逆就是y=f(x)是可以的,但是从知道y却很难得到x,这在数学上叫单项散列.象MD5算法就是这样的,可以用在密码加密或者是摘要算法,数字签名上
  • 打赏
  • 举报
回复
Vivianren 2004-05-02
不可逆算法一般用于加密上,原来要发的信息称为名为,经加密后的结果称为密文,
加密算法是某一种数学方法,但如果没有秘钥,反向只有密文和公钥的话,
可以这莫说,用世界上最好的计算机,如果也需几十年或上百年的话,就可以说
算法是不可逆的,即基本上不可破解的,就达到了加密的效果。
  • 打赏
  • 举报
回复
mme 2004-05-02
不可逆的函数好像不多吧。。。
我认为,如果是不可逆的话,那就是说,输入的密码是被剪切掉一些信息了,造成的结果就是不可能复原。

举例:
密码是 123456789
变形:用某种函数或者方法变成了 987654321
剪切:把后半部分去掉变成了 98765
再次变换:用某种方法变换成 12345
那,现在,你看看能不能从12345变回123456789,绝对不可能,因为某些信息在中间就已经丢失了
你看看你的源代码

result[0]=nr & (((ulong) 1L << 31) -1L);
result[1]=nr2 & (((ulong) 1L << 31) -1L);
我怀疑它用左移操作使得信息丢失了。
  • 打赏
  • 举报
回复
doubhua 2004-04-30
密码学中大概是这样说的:
如果一个x可以通过一个函数f(x)变成y( y=f(x) ), 但是计算f(x)的反函数的操作非常复杂或者无法实现,那么f(x)就叫做不可逆的算法。

最大的难度就是找到这样没有反函数的函数。
  • 打赏
  • 举报
回复
nik_Amis 2004-04-30
up
  • 打赏
  • 举报
回复
FireEmissary 2004-04-30
比方说,无论用户输入什么.一概清为0
这就是不可逆......:)
  • 打赏
  • 举报
回复
whoo 2004-04-30
a ==> b, b can't ==>a 这就是不可逆啦。

a 加密成b, b 解密又得到a, 这就是可逆的。

密码加密处于安全性考虑,大都是不可逆的,原始信息丢失怠尽,不存在什么反函数。
  • 打赏
  • 举报
回复
相关推荐
发帖
图形处理/算法
加入

1.9w+

社区成员

VC/MFC 图形处理/算法
申请成为版主
帖子事件
创建了帖子
2004-04-30 03:11
社区公告
暂无公告