Java、PHP 文件MD5、Sha1
加密的其实并不是一个文件而是文件的内容(FileInputStream),加密的其实是一个流(InputStream)。java.security 中的MessageDigest已经自带了一些基础的算法。PHP就更简单了,官方默认提供了md5_file和sha1_file函数。
test.php
<?php
echo md5_file("/Users/yz/bdlogo.gif")."\r\n";
echo sha1_file("/Users/yz/bdlogo.gif")."\r\n";
?>
MD5FileUtil.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
public class MD5FileUtil {
/**
* 获取文件MD5值
* @param file
* @return
*/
public static String getFileMD5(File file) {
if (!file.isFile()) {
return null;
}
try {
return getInputStreamMD5(new FileInputStream(file));
} catch (FileNotFoundException e) {
}
return null;
}
/**
* 获取输入流的MD5值
* @param is
* @return
*/
public static String getInputStreamMD5(InputStream is) {
if (is == null) {
return null;
}
MessageDigest digest = null;
byte buffer[] = new byte[8192];
int len;
try {
digest = MessageDigest.getInstance("MD5");
while ((len = is.read(buffer)) != -1) {
digest.update(buffer, 0, len);
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
} catch (Exception e) {
ClientLogger.clog(e);
return null;
} finally {
try {
is.close();
} catch (Exception e) {
ClientLogger.clog(e);
}
}
}
public static String getFileSha1(File file) {
if (!file.isFile()) {
return null;
}
try {
return getInputStreamSha1(new FileInputStream(file));
} catch (FileNotFoundException e) {
}
return null;
}
public static String getInputStreamSha1(InputStream is) {
MessageDigest digest = null;
byte buffer[] = new byte[8192];
int len;
try {
digest = MessageDigest.getInstance("SHA-1");
while ((len = is.read(buffer)) != -1) {
digest.update(buffer, 0, len);
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
} catch (Exception e) {
ClientLogger.clog(e);
return null;
} finally {
try {
is.close();
} catch (Exception e) {
ClientLogger.clog(e);
}
}
}
}