比较两个图像取文件MD5值

//简单比较两个图像是否一致

private boolean compare2Image(Bitmap bmp1,Bitmap bmp2)

    {

          int iteration = 0;

          int width = bmp1.getWidth();

          int height = bmp1.getHeight();

          if(width != bmp2.getWidth()) return false;

          if(height != bmp2.getHeight()) return false;

  

          if(width < height)

          {

                iteration = width;

          }

          else

          {

                iteration = height;

          }

         

          for(int i = 0; i < iteration; ++i)

         {             

                if(bmp1.getPixel(i, i) != bmp2.getPixel(i,i)) return false;

          }

          return true;

      }

}

 

//附获取文件md5代码

import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;

public class FileDigest {
  /**
   * 获取单个文件的MD5值!
   * @param file
   * @return
   */
  public static String getFileMD5(File file) {
    if (!file.isFile()){
      return null;
    }
    MessageDigest digest = null;
    FileInputStream in=null;
    byte buffer[] = new byte[1024];
    int len;
    try {
      digest = MessageDigest.getInstance("MD5");
      in = new FileInputStream(file);
      while ((len = in.read(buffer, 0, 1024)) != -1) {
        digest.update(buffer, 0, len);
      }
      in.close();
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
    BigInteger bigInt = new BigInteger(1, digest.digest());
    return bigInt.toString(16);
  }
 
  /**
   * 获取文件夹中文件的MD5值
   * @param file
   * @param listChild ;true递归子目录中的文件
   * @return
   */
  public static Map<String, String> getDirMD5(File file,boolean listChild) {
    if(!file.isDirectory()){
      return null;
    }
    //<filepath,md5>
    Map<String, String> map=new HashMap<String, String>();
    String md5;
    File files[]=file.listFiles();
    for(int i=0;i<files.length;i++){
      File f=files[i];
      if(f.isDirectory()&&listChild){
        map.putAll(getDirMD5(f, listChild));
      } else {
        md5=getFileMD5(f);
        if(md5!=null){
          map.put(f.getPath(), md5);
        }
      }
    }
    return map;
  }
 
 
  public static void main(String[] args) {
    File file1 = new File("a.txt");
    File file2 = new File("b.txt");
    System.out.println(getFileMD5(file1).equals(getFileMD5(file2)));
  }

}


 //大小内容比较

package com.test.compare;
// 程序清单
/* 
 * compare.java
 */

import java.io.*;
import java.math.BigInteger;
import java.security.MessageDigest;
/**
 * arg[0] is the first file name
 * arg[1] is the second file name
 * @author Mosaic
 */
public class compare {

 public static void main(String[] args) {
  InputStream file1;
  InputStream file2;
  byte buffer1[];
  byte buffer2[];
  int fileSize1 = 0;
  int fileSize2 = 0;

  try {
   file1 = new FileInputStream("2008.jpg");
   file2 = new FileInputStream("2009.jpg");
   fileSize1 = file1.available();
   fileSize2 = file2.available();
   // read data from the files
   buffer1 = new byte[fileSize1];
   buffer2 = new byte[fileSize2];

   if (fileSize1 != fileSize2) {
    System.out.println("The two files are different!");
    System.exit(0);
   }
   file1.read(buffer1);
   file2.read(buffer2);
   int cursor = 0;
   while (cursor < fileSize1) {
    if (buffer1[cursor] != buffer2[cursor++]) {
     System.out.println("The two files are different!");
     System.exit(0);
    }
    
   }
   System.out.println("The two files are the same");

  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: md5相同的文件二进制文件可能是完全相同的文件,但也可能是不同的文件。因为md5是通过对文件内容进行哈希计算得到的,不同的文件内容也可能会得到相同的md5。因此,如果两个文件md5相同,就不能确定它们是否是同一个文件,需要进一步比较它们的内容。 ### 回答2: MD5(Message Digest Algorithm 5)是一种常用的哈希函数,用于将任意长度的数据映射为128位的哈希。哈希是唯一的,因此如果两个文件MD5相同,那么它们的二进制文件必定相同。 具体来说,MD5相同的二进制文件意味着它们的数据内容完全一致。无论是文本文件图像文件、音频文件还是视频文件,只要它们的二进制数据完全一致,它们的MD5就会相同。 举个例子,假设有两个文本文件A和B,它们的内容分别是"Alice is a cat"和"Bob is a dog",它们分别通过MD5算法得到的哈希分别为X和Y。那么如果我们将文件A的内容改为"Bob is a dog",再使用MD5算法得到的哈希就会和B文件MD5Y相同。 同样地,对于其他类型的文件,只要它们的二进制数据完全一致,即使文件的扩展名不同,它们的MD5也会相同。因此,相同的MD5意味着文件的内容几乎完全一致。 然而,需要注意的是,MD5算法不是无冲突的,也就是说,不同的文件可能会有相同的MD5。这种情况被称为MD5碰撞,在密码学中有一些技术可以用来生成两个不同的文件但具有相同MD5的哈希碰撞。因此,在特殊情况下,可能存在MD5相同但内容不同的二进制文件。然而,在正常的使用情况下,MD5算法仍然是一种可靠的工具,用于验证文件的完整性和比较文件的内容是否一致。 ### 回答3: MD5(Message Digest Algorithm 5)是一种常用的哈希算法,它可以将任意长度的数据映射为固定长度的128位(16字节)散列。判断两个文件MD5是否相同,可以有效地判定这两个文件是否内容相同。 MD5相同的文件,可以说是具有相同的二进制文件内容。无论这些文件是文本、图像、音频或者其他类型的文件,只要它们的内容在二进制层面上是完全一致的,它们的MD5都会是相同的。 举个例子,我们可以考虑两个文本文件,它们的内容分别是:"Hello World!"和"你好,世界!",虽然这两个文件内容不同,但它们的MD5都是同样的。因为文件经过编码后都会被转换成二进制,无论是英文字符还是汉字,最终都会被表示为一组二进制编码。只有当两个文件的二进制编码完全一致时,它们的MD5才会相同。 换句话说,任何两个二进制文件,在它们的每个比特位上的都完全相同的情况下,它们的MD5就会是相同的。而只要有一个或多个比特位不同,那么它们的MD5就会不同。 总结起来,MD5相同的文件二进制文件具有完全相同的内容,无论是什么类型的文件都适用。在文件传输、数据比对等场景中,通过比较MD5可以有效判断文件的一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值