计算MD5码

应用环境:计算MD5码时上报进度

主要代码:

import java.security.MessageDigest;

MessageDigest digest=MessageDigest.getInstance("md5");

digest.update(buf,0,count);//将buf中0-count的字节放到digest中

md5Bytes=digest.digest();//生成hashcode

//计算md5码

for (int i = 0; i < md5Bytes.length; i++) {
   int val = ((int) md5Bytes[i]) & 0xff;
   if (val < 16)
  hexValue.append("0");
   hexValue.append(Integer.toHexString(val));
 }

View Code
 1  @Override
 2   public void doTask() throws Exception {
 3     MessageDigest digest = MessageDigest.getInstance("md5");
 4     File file = new File(path);
 5     // Task task = new Task();
 6     // setTask(task);
 7     // setTotalSize(file.length());
 8     if (!file.exists()) {
 9       // throw file not exist exception
10       throw new FileNotFoundException("File don't exist!");
11     }
12     InputStream is = new BufferedInputStream(new FileInputStream(file));
13     int count = 0;
14     long totalCalculated = 0;
15     byte[] buf = new byte[BUFFER];
16     boolean cancelled = false;
17     while ((count = is.read(buf, 0, BUFFER)) != -1) {
18       // digest bytes
19       digest.update(buf, 0, count);
20       totalCalculated += count;
21       // fire task progress
22       taskProgressChanged(totalCalculated);
23       if (!check()) {
24         cancelled = true;
25         break;
26       }
27     }
28     is.close();
29     byte[] md5Bytes;
30     StringBuffer hexValue = new StringBuffer();
31     md5Bytes = digest.digest();
32     for (int i = 0; i < md5Bytes.length; i++) {
33       int val = ((int) md5Bytes[i]) & 0xff;
34       if (val < 16)
35         hexValue.append("0");
36       hexValue.append(Integer.toHexString(val));
37     }
38     // System.out.println(hexValue.toString());
39     String md5 = hexValue.toString();
40     if (cancelled) {
41       // save md5 to database
42       templateImageDao.saveMd5(templateImageId, md5);
43     }
44   }
45 
46   private String templateId;
47   private int templateVersion;
48   private String templateImageId;
49   private String templateImageName;
50   // absolute path
51   private String path;
52 
53   private TemplateImageDao templateImageDao = new TemplateImageDao();
54   public static final int BUFFER = 8192;
55 
56   // public static void main(String[] args) {
57   // CalculateDigestSubTask c = new CalculateDigestSubTask();
58   // c.setPath("e:\\test\\test1\\11.txt");
59   // try {
60   // c.doTask();
61   // } catch (Exception e) {
62   // // TODO Auto-generated catch block
63   // e.printStackTrace();
64   // }
65   // }
原文地址:https://www.cnblogs.com/sunflower627/p/2780897.html