MD5还原的问题!
我做的网站用户密码是用MD5加密了的,但是我做到密码找回的时候,密码是找回了。但是就是加密了的二进制数。纳闷啊。。请问这个MD5加密的密码如何能还原成用户设置的本来密码?有高人的话尽快回个话,谢谢了先!
------解决方案--------------------如果你自己有一个md5计算结果,你不可能使用 http://www.cmd5.com/ 这类骗人的东西“解密”。实际上,它首先哄骗你在它的网站上“加密”,没就是把原始数据先输入进去。然后,当你再输入刚刚计算出来的md5结果时,它直接拿出你刚刚输入的数据,说“看,我解密啦”。这是哄小孩的呀。既然你自己的程序中保存了原始信息,何来“解密”?直接查询一下md5结果对应的原始信息就可以了。
------解决方案--------------------对了,说一下我一直用于在计算密码的md5值的算法,我实际上要把用户输入的密码跟网站安装信息(例如授权号、用户单位名称和地址)拼在一起,然后把它再跟它自己字符串反转结果拼在一起,最后判断总长度是否大于100个字符,如果不足100个字符还要自己再反转一次字符串结果然后跟自己拼在一起,这样的得到结果再计算md5。
其核心思想就是:不要用一个较短的字符串去计算散列值。
如果用户仅仅输入了3个字符,你也要用一定的算法把它有规律地扩展成超过100个字符的一个长串再去计算md5。
实际上,md5可以用于对重要的合同进行签名。然后将md5值以一种非常“昂贵”的方式进行真正的加密和传递,这样就能保证通讯过程中没人能随便改动合同中的一个字。
要记住,使用md5来计算一个比较长一些的字符串,不要计算过短的字符串,否则会被别有用心的人利用。
------解决方案--------------------实际上,如果你计算md5之前把待计算的字符串随便加上一段胡乱打入的写死的字符串,http://www.cmd5.com/ 的把戏就“破产”了。当然,如果这个补充字符串是像软件开发商信息、网站授权信息之类的有意义的字符串,看可以起到防止用户将数据库拿给其它非授权用户的系统中使用的目的等。
我这样说的目的。就是希望楼主了解,如果你使用了md5方法就要遵循他的初衷来设计你的程序。没有可能解密之类的。但是你可以把用户曾经输入过得密码及其md5值写入自己的数据库,这样根据md5值就能反向查处原始密码,正如2楼所说的,这叫做数据库查询而不是解密。用户输入的密码不能直接作为md5处理对象,还应该将其人为扩展成一个较长的字符串,这样别有用心的人就无法用你的漏洞来做出一个攻击你的系统的代码反过来要挟你。