最近带了电子工程实践一门课程,需要各位同学上交作业,这种实践课程作业相互抄袭一向常见,如果是抄袭也还好,由于交的是电子版,最可恶的就是拿别人的文件改了下名字就变成自己的,识别方法有很多,最简单的方法就是看修改时间和文件大小。
如下图所示,不同人的作业,修改时间、文件大小完全相同,正常情况下这是不可能发生的事情。(图中涉及姓名均以做处理)所以这种情况基本可以判断这些文件是否相同了,但是单纯从这一点判断还很难说明问题,还需要更严谨的方法。
更严谨一点的就是比对SHA1和MD5值。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被"篡改"。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的"抵赖",这就是所谓的数字签名应用。也就是说MD5可以作为判断两个文件是否相同的重要标准。如果两个文件的MD5值相同,那么可以肯定这两个文件就是一样的。
将上面的文件进行MD5验证。可以看到,这两个文件虽然文件名不同,但是MD5值和SHA1、CRC32等校验值完全相同。
而同样的一个文件,哪怕只要打开做一点点改动,最后得到的就是两个完全不相同的MD5值,下图中为我用自己的软件对文件打开后没有做任何改动重新保存的校验结果。
基本原理已经清楚了,那么写个程序来批量比较就很容易了,好在网上可以非常方便的找到的类似的程序,于是对所有同学的作业进行了MD5值比较。比较结果如下,下图左侧为比较的文件,右侧为相同的文件路径列表。
通过上面的分析,有那些人的作业是直接拷贝别人的文件直接改个名字就交上来的这样一分析就非常清楚了。可惜结果很让人痛心。
学生何苦为难学生,我不会给低分,但是直接改文件名就交作业的同学也不会有高分。