MD5算法
MD5全称为Message Digest Algorithm,中文名字为消息摘要算法第五版。MD5算法为计算机安全领域广泛使用的一种散列函数,可以用于消息的完整性保护及检测。
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
MD5检查相同文件
在网络开发中,需要上传文件到服务器上,不同人上传的文件可能相同,这样会造成网络资源的浪费,所以通过MD5算法通过文件内容计算得出一个文件名,在与服务器上的文件匹配,如有则不上传,这样就能保证服务器上的文件的一致性。下面是利用MD5算法通过文件内容得到一个文件名的代码实现。
代码实现
private static final char HEX_DIGITS[] = {'0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F'};
public static String toHexString(byte[] b) {
StringBuilder sb = new StringBuilder(b.length * 2);
for (int i = 0; i < b.length; i++) {
sb.append(HEX_DIGITS[(b[i] & 0xf0) >>> 4]);
sb.append(HEX_DIGITS[b[i] & 0x0f]);
}
return sb.toString();
}
public static String md5sum(String filename) {
InputStream fis;
byte[] buffer = new byte[1024];
int numRead = 0;
MessageDigest md5;
try{
fis = new FileInputStream(filename);
md5 = MessageDigest.getInstance("MD5");
while((numRead=fis.read(buffer)) > 0) {
md5.update(buffer,0,numRead);
}
fis.close();
return toHexString(md5.digest());
} catch (Exception e) {
System.out.println("error");
return null;
}
}
}