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); } } } }