您好,欢迎访问一九零五行业门户网

获取文件的md5(java & php)

每个文件都可以用md5验证程序算出一个固定的md5码来,它是一个文件的文件签名,可用于验证自己下载的软件是否为原版。百度网盘的“秒传”应该也用到了这个,即上传之前首先计算该文件的md5,然后看服务器上有没有该文件,有的话从服务端直接拷贝,节省上传时
每个文件都可以用md5验证程序算出一个固定的md5码来,它是一个文件的文件签名,可用于验证自己下载的软件是否为原版。百度网盘的“秒传”应该也用到了这个,即上传之前首先计算该文件的md5值,然后看服务器上有没有该文件,有的话从服务端直接拷贝,节省上传时间和降低网络负担。
java的md5util类:
import java.io.file;import java.io.fileinputstream;import java.io.ioexception;import java.nio.mappedbytebuffer;import java.nio.channels.filechannel;import java.security.messagedigest;import java.security.nosuchalgorithmexception;import org.slf4j.logger;import org.slf4j.loggerfactory;public class md5fileutil { private static final logger logger = loggerfactory .getlogger(md5fileutil.class); protected static char hexdigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; protected static messagedigest messagedigest = null; static { try { messagedigest = messagedigest.getinstance(md5); } catch (nosuchalgorithmexception e) { logger.error(md5fileutil messagedigest初始化失败, e); } } public static string getfilemd5string(file file) throws ioexception { fileinputstream in = new fileinputstream(file); filechannel ch = in.getchannel(); mappedbytebuffer bytebuffer = ch.map(filechannel.mapmode.read_only, 0, file.length()); messagedigest.update(bytebuffer); return buffertohex(messagedigest.digest()); } public static string getmd5string(string s) { return getmd5string(s.getbytes()); } public static string getmd5string(byte[] bytes) { messagedigest.update(bytes); return buffertohex(messagedigest.digest()); } private static string buffertohex(byte bytes[]) { return buffertohex(bytes, 0, bytes.length); } private static string buffertohex(byte bytes[], int m, int n) { stringbuffer stringbuffer = new stringbuffer(2 * n); int k = m + n; for (int l = m; l > 4]; char c1 = hexdigits[bt & 0xf]; stringbuffer.append(c0); stringbuffer.append(c1); } public static boolean checkpassword(string password, string md5pwdstr) { string s = getmd5string(password); return s.equals(md5pwdstr); } public static void main(string[] args) throws ioexception { long begin = system.currenttimemillis(); file big = new file(d:\\temp\\jre-7u11-linux-i586.tar.gz); string md5 = getfilemd5string(big); long end = system.currenttimemillis(); system.out.println(md5: + md5); system.out.println(time: + ((end - begin) / 1000) + s); }}
php例子1:

会输出类似下面一串字符:
5d41402abc4b2a76b9719d911017c592
例子 2  存储 test.txt 文件的 md5 散列:

//在本例中,我们将检测 test.txt 是否已被更改(即是否 md5 散列已被更改):

输出:
the file is ok.
其它类似信息

推荐信息