MD5 是message-digest algorithm 5 (信息-摘要算法)缩写,广泛用于加密和解密技术,常用于文件校验。校验?MD5是用于对信息生成
信息摘要(即
散列码
)的算法之一。
不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。一般下载linux-ISO的朋友都见过下载链接旁边放着MD5的串。就是用来验证文件是否一致的
。关于
信息摘要
和
散列码
请参照《
数字证书简介
》
关于MD5用于验证文件发放和收方是否一致的大概流程如图1所示
图1
以下是对于MD5计算的一个简单包装类
MD5Util.java文件
package edu . edut . robin . utils ;import java . io . File ;import java . io . FileInputStream ;import java . io . IOException ;import java . io . InputStream ;import java . io . UnsupportedEncodingException ;import java . security . MessageDigest ;import android . util . Log ;public class MD5Util{private static String encodingAlgorithm = "MD5" ;public final static byte [] md5sum ( byte [] data ) {if ( data == null || data . length == 0 ){return null ;}try {MessageDigest mdTemp = MessageDigest . getInstance ( encodingAlgorithm );mdTemp . update ( data );return mdTemp . digest ();} catch ( Exception e ) {}return null ;}static String convertToHexString ( byte data []) {StringBuffer strBuffer = new StringBuffer ();for ( int i = 0 ; i < data . length ; i ++) {strBuffer . append ( Integer . toHexString ( 0xff & data [ i ]));}return strBuffer . toString ();}public static byte [] md5sum ( File file ) {InputStream fis = null ;byte [] buffer = new byte [ 1024 ];int numRead = 0 ;MessageDigest md5 ;try {fis = new FileInputStream ( file );md5 = MessageDigest . getInstance ( encodingAlgorithm );while (( numRead = fis . read ( buffer )) > 0 ) {md5 . update ( buffer , 0 , numRead );}return md5 . digest ();} catch ( Exception e ) {e . printStackTrace ();return null ;} finally {if ( fis != null ){try {fis . close ();} catch ( IOException e ) {e . printStackTrace ();}}}}}
结束