[转载]Java(Android)对文件全文生成MD5摘要

程序出处:http://liuxiang8484.blog.163.com/blog/static/734790972011101093250899/


  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;  
  4. import java.security.MessageDigest;  
  5.   
  6. public class MyMD5 {  
  7.   
  8. /** 
  9.   * 对文件全文生成MD5摘要 
  10.   *@param file要加密的文件 
  11.   * @return MD5摘要码 
  12. */  
  13.     static char hexdigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };  
  14.       
  15.     public static String getMD5(File file) {  
  16.           
  17.      FileInputStream fis = null;  
  18.      try {  
  19.          MessageDigest md = MessageDigest.getInstance("MD5");  
  20.          fis = new FileInputStream(file);  
  21.          byte[] buffer = new byte[2048];  
  22.          int length = -1;  
  23.          long s = System.currentTimeMillis();  
  24.          while ((length = fis.read(buffer)) != -1) {  
  25.              md.update(buffer, 0, length);  
  26.          }  
  27.   
  28.         //32位加密  
  29.         byte[] b = md.digest();  
  30.         return byteToHexString(b);  
  31.   
  32.         // 16位加密  
  33.         // return buf.toString().substring(8, 24);  
  34.   
  35.         } catch (Exception ex) {  
  36.             ex.printStackTrace();  
  37.             return null;  
  38.         }   
  39.         finally {  
  40.         try {  
  41.             fis.close();  
  42.         } catch (IOException ex) {  
  43.             ex.printStackTrace();  
  44.         }  
  45.       }  
  46.    }  
  47.   
  48. /** 
  49.   * 把byte[]数组转换成十六进制字符串表示形式 
  50.   * @param tmp    要转换的byte[] 
  51.   * @return 十六进制字符串表示形式 
  52.   */  
  53.   
  54.     private static String byteToHexString(byte[] tmp) {  
  55.         String s;  
  56.         // 用字节表示就是 16 个字节  
  57.         char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,  
  58.         // 所以表示成 16 进制需要 32 个字符  
  59.         int k = 0; // 表示转换结果中对应的字符位置  
  60.         for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节  
  61.             // 转换成 16 进制字符的转换  
  62.             byte byte0 = tmp[i]; // 取第 i 个字节  
  63.             str[k++] = hexdigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,  
  64.             // >>> 为逻辑右移,将符号位一起右移  
  65.             str[k++] = hexdigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换  
  66.         }  
  67.         s = new String(str); // 换后的结果转换为字符串  
  68.         return s;  
  69.    }  
  70.       
  71.       
  72.     public static void main(String arg[]) {  
  73.           System.out.println(getMD5(new File("e:/a.txt")));  
  74.     }  
  75. }  

新建Java工程,在默认包中创建.java文件,将代码复制其中,修改main()方法中的文件路径后,编译运行即可得到结果;

如果是android工程,在某包中新建java文件,将代码复制其中,去掉main()方法。在包中其他文件某处如果想使用“对文件全文生成MD5摘要”功能,只需编写MyMD5.getMD5(/*文件路径*/);语句即可,因为getMD5方法被声明为类方法,即不用实例化类对象即可使用。

posted @ 2015-01-01 22:16  chenlinyunyi  阅读(295)  评论(0编辑  收藏  举报