在这次项目中需要对图片MD5来确定一张图片的唯一性,如果两个图片MD5相同就认定问两张图片是同一张图,只不过是被转载的。

在多次查找资料后写出来下面的通用类

1、将图片转换成二进制数组

public static String getMD5(String URLName){

String name="";

try {

URL url = new URL(URLName);

InputStream inputStream = new BufferedInputStream(url.openStream());

byte[] bytes = new byte[1024];

int len = 0;

MessageDigest messagedigest = MessageDigest.getInstance("MD5");

while ((len = inputStream.read(bytes)) > 0) {

messagedigest.update(bytes, 0, len);

}

name = MD5Util.bufferToHex(messagedigest.digest());

inputStream.close();

} catch (MalformedURLException e) {

LogUtil.getLogger().warn(e);

} catch (IOException e) {

LogUtil.getLogger().warn(e);

} catch (NoSuchAlgorithmException e) {

LogUtil.getLogger().warn(e);

}

return name;

}

有一点很重要 使用了MessageDigest类  下面有该类的介绍

2。、调用方法

public class MD5Util {

/**

* 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符

*/

protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6','7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

protected static MessageDigest messagedigest = null;

static {

try {

messagedigest = MessageDigest.getInstance("MD5");

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

}

public static String getFileMD5String(File file) throws IOException {

InputStream fis;

fis = new FileInputStream(file);

byte[] buffer = new byte[1024];

int numRead = 0;

while ((numRead = fis.read(buffer)) > 0) {

messagedigest.update(buffer, 0, numRead);

}

fis.close();

return bufferToHex(messagedigest.digest());

}

public static String getStringMD5(String str){

byte[] buffer=str.getBytes();

messagedigest.update(buffer);

return bufferToHex(messagedigest.digest());

}

public static String bufferToHex(byte bytes[]) {

return bufferToHex(bytes, 0, bytes.length);

}

private static String bufferToHex(byte bytes[], int m, int n) {

StringBuffer stringbuffer = new StringBuffer(2 * n);

int k = m + n;

for (int l = m; l < k; l++) {

appendHexPair(bytes[l], stringbuffer);

}

return stringbuffer.toString();

}

private static void appendHexPair(byte bt, StringBuffer stringbuffer) {

char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换

// 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同

char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换

stringbuffer.append(c0);

stringbuffer.append(c1);

}

}

Java 加密技术:消息摘要。

一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。

消息摘要有两个基本属性:

两个不同的报文难以生成相同的摘要

难以对指定的摘要生成一个报文,而由该报文反推算出该指定的摘要

代表:美国国家标准技术研究所的SHA1和麻省理工学院Ronald Rivest提出的MD5

类 java.security.MessageDigest

java.lang.Object

|

+----java.security.MessageDigest

public abstract class

MessageDigest

extends

Object

MessageDigest 提供了消息摘要算法,如 MD5 或 SHA,的功能。消息摘要是安全单向散列函数,它采用任意大小的数据并输出一个固定长度的散列值。

象 Java 安全性中的其它基于算法的类一样,MessageDigest 有两个主要的组件:

消息摘要 API ( 应用程序接口 )

这是需要消息摘要服务的应用调用的方法的接口。这个 API 由所有公有方法组成。

消息摘要 SPI ( 服务提供者接口 )

该接口是由提供特殊算法的提供者实现的接口。它由所有名字前缀为

engine 的方法组成。每个这样的方法由具有相应名字的公有 API 方法调用。例如,

engineReset 方法由

reset 方法调用。SPI 方法是抽象的;提供者必须提供一个具体的实现。

MessageDigest 对象在启动时被初始化。使用 update 方法处理数据。在任何地方都可调用 reset 复位摘要。一旦所有需要修改的数据都被修改了,将调用一个 digest 方法完成散列码的计算。

对于给定次数的修改,只能调用 digest 方法一次。在调用 digest 之后,MessageDigest 对象被复位为初始化的状态。

java 图片md5码_java 对图片进行MD5算法相关推荐

  1. java md5 密钥_java加密算法--MD5加密和哈希散列带秘钥加密算法源码

    packagecom.ompa.common.utils;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmEx ...

  2. java商城源码_java 多商户商城系统源码分享

    三勾商城多商户是开发友好的微信小程序商城,框架支持SAAS,支持发布 iOS + Android + 公众号 + H5 + 各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)等多个平台,不可多得 ...

  3. java 打印一维码_java生成一维码

    /** * * 一维码图片生成器 * @author winter.liu * */ public class OneBarcodeUtil { /** * 生成一维码 * @param value ...

  4. java md5类_java的md5加密类

    MD5算法是将数据进行不可逆加密的算法有较好的安全性,在国内如寿信的安全支付平台就采用此算法. 源代码如下 /********************************************* ...

  5. java验证码源码_Java通用验证码程序及应用示例(提供源码下载)

    评论 # re: Java通用验证码程序及应用示例(提供源码下载) 2009-11-27 17:09 零全零美 多谢博主写出这么好的总结,如果能加上汉字验证码,会更完美!  回复  更多评论 # re ...

  6. java selector 源码_Java NIO核心组件-Selector和Channel

    昨天我们介绍了一下SelectorProvider和IO multiplexing.特别是IO multiplexing中的epoll系统调用,是Linux版本的Java的NIO的核心实现. 那今天我 ...

  7. java图片转字符_java实现图片转字符图(看的过去的亚子)

    普通图片转换为ASSIC码灰度图片 原图: 效果图: 转换方法 读取图片文件到BufferedImage 读取BufferedImage中的RGB值 将RGB三色值按照(0.3,0.59,0.11)权 ...

  8. java 图片 内存溢出_Java修改图片尺寸,总是报内存溢出怎么解决?

    项目需求:有很多尺寸很大的图片(图片大小可能几十MB,甚至上百MB),需要等比例缩小它们的尺寸,相当于生成缩略图. 例如:原图8268x6201,需要压缩成400x300. 我现在的方法:将图片整个读 ...

  9. java 图片传输方式_Java图像传输方法

    在研发B/S视频系统时候涉及到了图片在网络中的传输,研究了一些资料,也积累了部分经验: 一.序列化后传输 图像对象可以编码成指定图像格式文件保存在硬盘上,需要时再对其进行解码读入内存.但是除了这样还有 ...

  10. java中字节码_Java字节码浅析(三)

    英文原文链接,译文链接,原文作者:James Bloom,译者:有孚 从Java7开始,switch语句增加了对String类型的支持.不过字节码中的switch指令还是只支持int类型,并没有增加对 ...

最新文章

  1. 2022-2028年中国集装箱涂料行业市场研究及前瞻分析报告
  2. linux中高并发socket最大连接数的优化详解
  3. 游戏角色口型老是对不上?这里有一个高效解决方案
  4. 关于二叉堆(优先队列)的其他操作及其应用
  5. vue delete删除json数组_vue面试题总结(二)
  6. mysql+安全性语言实验,实验四--数据库的安全性、完整性控制
  7. Node.js babel
  8. electron sqlite3_Electron+React+Antd工程搭建
  9. Hive MetaStore 配置
  10. java基础知识精讲视频教程百度云盘分享!
  11. 微星X470主板装机
  12. 使用Grafana+loki+promtail入门级部署分布式日志系统(windows环境)
  13. <爬虫> 豆瓣电影排行榜(含代码)
  14. 算法注册机编写扫盲---第五课
  15. Want to be happy? Be grateful - David Steindl-Rast
  16. 谷歌浏览器点击上传文件崩溃/上传图片崩溃/打开浏览文件未响应 解决方案
  17. wifi(华硕天选2)找不到怎么办
  18. PS四种扁平化设计风格-网摘
  19. python爬虫音乐图片的感受_python爬虫+词云图,爬取网易云音乐评论
  20. 韩国PAYWAVE认证之技术篇2

热门文章

  1. 华硕ProArt创16 2022:为创作而生
  2. 魅族一直显示无服务器,魅族手机用久了卡顿,这三个方法轻松解决
  3. freeswitch exporter
  4. 使用现有在线翻译服务进行代码翻译的体验
  5. 最新消息,CDRX7冰点价再返现,你知道么?
  6. 用CSS美化表格【前端知识】
  7. 无线网络WI-FI技术的专业名词解析
  8. 微信小程序开发——将自己的图片变成网络图片/图片链接生成
  9. mac上面使用siege并发测试工具
  10. 中建政研马海顺-PPP项目EPC工程总承包全过程管控与风险防范