首先说我不是搞密码的,以前用MD5仅仅是写程序时处于安全考虑对口令进行加密,对于为什么MD5不能破解也不是太清楚(山大的王小云教授部分破解了MD5已经是事实),有时会看到一些软件的下载处会注明一个MD5的哈希值,开始以为是序列号之类的,但我从来没用到过这串乱码,到底为什么我希望弄清楚。
  我翻了一下资料上面说经MD5、SHA1之类的哈希算法得到的仅仅是个消息摘要,如果明文中稍作改动就会使得到的哈希产生很大的变化,不太明白也懒得看太多,于是我写了一句代码测试一下:
<?php
$string = 'tttttt';
echo md5($string);
?>

当我改变string的值时,输出果然一点都不一样,我还将$string设为很长的一段文字,通过修改其中某个字符前后来判断,结果和前面一样。那么现在我产生一点想法,通过这种方法我可以判断我的文档中的文字是否被别人修改过,但是好多文档并不是普通的文本文件,比如一幅图片、一个软件,能不能用类似的办法判断是否被人修改过呢?继续测试吧,首先我读取一个二进制文件到内存中,再对读取的内容做哈希不就可以了嘛!于是用下面的代码:
<?php
$filename = "c:\\test\\photo.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize ($filename));
fclose($handle);
?>
 

我测试了好几种文件类型,最小的几十K,最大的600多兆,都是可行的!唯一的缺点是感觉用PHP去执行效率有点低,有这个想法我当然可以用delphi之类(其它的我还不会呢,呵呵)的工具写一个界面友好点的工具了,写到这里,才突然想到网上这种工具肯定很多,就当一个学习的过程吧!