博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转载]Java(Android)对文件全文生成MD5摘要
阅读量:4708 次
发布时间:2019-06-10

本文共 1813 字,大约阅读时间需要 6 分钟。

程序出处:

[java]
  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方法被声明为类方法,即不用实例化类对象即可使用。

转载于:https://www.cnblogs.com/roycl/articles/4197905.html

你可能感兴趣的文章
用户画像展示
查看>>
C#中StreamReader读取中文出现乱码
查看>>
使用BufferedReader的时候出现的问题
查看>>
批处理文件中的路径问题
查看>>
hibernate出现No row with the given identifier exists问题
查看>>
为什么wait()和notify()属于Object类
查看>>
配置NRPE的通讯
查看>>
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
SSH加固
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
python 二维字典
查看>>
实验吧之【天下武功唯快不破】
查看>>