`
chenxu_8456
  • 浏览: 42085 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Java实现图片比对(1)-MD5方式

 
阅读更多
图片对比的一个思路是将文件转换为二进制文件流,然后对图片二进制流进行MD5编码,比对图片二进制流MD5编码的结果,不过该方法的缺点当同一图片使用不同的压缩算法进行存储后会失效;
public static byte[] getTuPianBytes(String name) {
		File file = new File(name);
		byte[] tuPianBytes = new byte[(int) file.length()];
		InputStream in = null;
		try {
			in = new FileInputStream(file);
			in.read(tuPianBytes);
			in.close();
		} catch (FileNotFoundException e) {
			tuPianLog_NotSame.log("can not find file " + name);
		} catch (IOException e) {
			tuPianLog_NotSame.log("read picture error " + name);
		}
		return tuPianBytes;
	}

	private static byte[] getTuPianFromWeb(String urlAddress) {
		URL url = null;
		HttpURLConnection conn = null;
		byte[] tuPianBytes = null;
		try {
			url = new URL(urlAddress);
			conn = (HttpURLConnection) url.openConnection();
			if (conn.getResponseCode() == 200) {
				InputStream in = conn.getInputStream();
				tuPianBytes = readStream(in);
			} else if (conn.getResponseCode() == 500) {
				throw new PictureNotFoundError("can not found #ADD# picture: "
						+ urlAddress);
			}
		} catch (IOException ioE) {
			ioE.printStackTrace();
		} finally {
			if (conn != null) {
				conn.disconnect();
				conn = null;
			}
			if (url != null) {
				url = null;
			}
		}
		return tuPianBytes;
	}
	
	private static byte[] readStream(InputStream in) {
		try {
			ByteArrayOutputStream outstream = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			int length = -1;
			while ((length = in.read(buffer)) != -1) {
				outstream.write(buffer, 0, length);
			}
			outstream.close();
			in.close();
			return outstream.toByteArray();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	private static String getTuPianMD5(byte[] tuPianBytes) {
		if (tuPianBytes == null) {
			return "";
		}
		byte[] strTemp = tuPianBytes;
		try {
			MessageDigest digest = MessageDigest.getInstance("MD5");
			digest.update(strTemp);
			byte[] md = digest.digest();
			int j = md.length;
			char str[] = new char[j * 2];
			int k = 0;
			for (int i = 0; i < j; i++) {
				byte byte0 = md[i];
				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
				str[k++] = hexDigits[byte0 & 0xf];
			}
			return new String(str);
		} catch (NoSuchAlgorithmException ignore) {
			return null;
		}
	}
分享到:
评论

相关推荐

    MD5算法的JavaBean.rar_md5_md5 文件比对 java_md5算法_指纹_计算 文件 MD5

    在Java编程中,我们可以利用内置的`java.security.MessageDigest`类来实现MD5计算。首先,我们需要导入相关库: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; ...

    java 实现文件MD5 加密比较,防止上传重复文件

    这个类可以实现,java语言下通过对上传文件进行MD5加密,然后将加密值与原来上传的文件加密值进行对比,防止上传重复文件。

    MD5加密+签名算法Sign生成 工具类

    1. **MD5加密**:对输入的字符串进行MD5哈希运算,返回32位的MD5值。在登录场景中,可以将用户的明文密码转化为MD5值存储,每次登录时对输入的密码进行相同处理后比对,既保证了安全性,又不暴露原始密码。 2. **...

    java实现的图片防篡改功能

    在这个项目中,我们主要探讨如何利用Java实现图片的防篡改功能,通过生成图片的唯一标识(哈希值)并进行比对来检测图片是否被篡改。 1. **哈希算法**: 哈希(Hash)函数是一种将任意长度的数据映射为固定长度...

    jar包MD5加密包含用法

    JavaMD5.jar这个文件是一个Java库,它包含了MD5加密的实现。使用这个库可以方便地在Java程序中集成MD5功能,而无需手动编写复杂的哈希计算代码。通常,这个库会包含`java.security.MessageDigest`类的封装,该类是...

    java比对升级工具

    这些库的组合使用,使Java比对升级工具具备了处理各种数据操作和通信的能力,从而实现高效、安全的软件升级。在实际应用中,用户可以根据具体的项目需求,配置和调用这些库中的方法,完成文件比对、下载新版本、替换...

    获取目录下所有文件和文件夹,并计算其MD5值,两个文件夹比较,得出被篡改的目录路径

    本项目的核心是通过Java编程语言来实现对目录下所有文件和子目录的遍历,同时计算每个文件的MD5值。这涉及到Java的IO流和递归算法。递归是一种解决问题的方法,它定义问题的解为一个或多个规模更小的同类问题的解。...

    Java MD5 加密数据库连接池密码

    在Java中,可以使用java.security.MessageDigest类来实现MD5加密。以下是一个简单的MD5加密步骤: 1. 引入`java.security`包和`javax.crypto`包。 2. 创建`MessageDigest`实例,指定算法为MD5。 3. 更新要加密的...

    MD5Util.zip

    4. **异步计算**:在处理大量数据或大文件时,为了提高效率,MD5Util可能支持异步计算MD5值,使用线程池或者Java 8的CompletableFuture来实现。 5. **性能优化**:考虑到MD5计算的性能,MD5Util可能做了缓存优化,...

    MD5加密jar包及案例

    1. **MD5加密jar包**:这些预编译的库可能包含了实现MD5加密功能的Java类和方法,比如`java.security.MessageDigest`类的使用,它可以用来创建MD5实例并进行哈希运算。使用这些jar包,开发者可以直接调用API进行MD5...

    servlet+jsp实现的有验证码和MD5加密的登陆

    本项目"Servlet+jsp实现的有验证码和MD5加密的登陆"是一个典型的Web登录系统,它结合了数据库操作、前端展示和安全机制,具体涉及以下几个关键知识点: 1. **Servlet**:Servlet是Java编写服务器端应用程序的接口,...

    java使用计算md5校验码方式比较两个文件是否相同

    首先,`MD5Check`类初始化了一个`MessageDigest`实例,通过`getInstance("MD5")`方法获取MD5算法的实现。这里使用了Java的`NoSuchAlgorithmException`异常处理,如果系统不支持MD5算法,该异常会被抛出。 `...

    md5值校验工具

    - 显示文件名和对应的MD5值,方便比对。 - 可能支持其他哈希算法,如SHA-1、SHA-256等。 - 生成校验报告,便于记录和分享文件的哈希值。 - 用户友好的界面,简化操作流程。 在实际应用中,MD5校验工具可以帮助用户...

    md5.zip_md5_计算MD5

    描述中提到“MD5加密源码用来计算任何数据的MD5值”,这暗示了这个压缩包内的源代码实现了MD5算法,可以用于对任何输入数据进行处理,包括但不限于文本、图片、文档等,计算出对应的MD5值。MD5虽然不是一种加密算法...

    用java语言编写的MD5加密

    在JAVA中,实现MD5加密主要是为了数据的完整性验证和非对称加密,例如存储密码时避免明文保存,提高安全性。 在JAVA中,我们可以使用内置的`java.security.MessageDigest`类来实现MD5加密。以下是一个简单的MD5加密...

    MD5码生成工具

    总的来说,MD5码生成工具是IT领域中一个实用的辅助工具,Java程序员可以借助如`MD5Gene.java`这样的代码来便捷地实现MD5码的计算。然而,需要注意的是,由于MD5的安全性问题(容易出现碰撞),在密码学等领域,MD5...

    扩展界面一|Md5加密支持库

    1. 引入库:首先在项目中引入“扩展界面一|Md5加密支持库”,这通常通过编程语言的包管理器完成,如Java的Maven或Python的pip。 2. 导入库函数:根据库提供的API文档,导入相应的MD5加密函数。 3. 数据预处理:...

    生成md5码的工具

    1. **数据完整性检查**:当文件通过网络传输或者存储后,可以通过比较原始文件和接收/恢复文件的MD5值来确认数据是否完整无损。 2. **文件校验**:下载软件或更新时,官方通常会提供MD5值,用户可以计算本地文件的MD...

    Android Md5 计算(源码)

    在Android中,我们可以使用Java标准库中的`java.security.MessageDigest`类来实现MD5的计算。首先,需要导入相应的库: ```java import java.security.MessageDigest; import java.security....

    基于中科院seetaface2的Java人脸识别库设计源码

    seetaface2 Java人脸识别库 - 基于Java开发,包含35个文件,如JAVA...该项目是一个基于中科院seetaface2的人脸识别库,提供了人脸识别、1:1比对、1:N比对等功能,为开发者提供了一个高效、易用的Java人脸识别解决方案。

Global site tag (gtag.js) - Google Analytics