java 图片md5码_java 对图片进行MD5算法
在这次项目中需要对图片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算法相关推荐
- java md5 密钥_java加密算法--MD5加密和哈希散列带秘钥加密算法源码
packagecom.ompa.common.utils;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmEx ...
- java商城源码_java 多商户商城系统源码分享
三勾商城多商户是开发友好的微信小程序商城,框架支持SAAS,支持发布 iOS + Android + 公众号 + H5 + 各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)等多个平台,不可多得 ...
- java 打印一维码_java生成一维码
/** * * 一维码图片生成器 * @author winter.liu * */ public class OneBarcodeUtil { /** * 生成一维码 * @param value ...
- java md5类_java的md5加密类
MD5算法是将数据进行不可逆加密的算法有较好的安全性,在国内如寿信的安全支付平台就采用此算法. 源代码如下 /********************************************* ...
- java验证码源码_Java通用验证码程序及应用示例(提供源码下载)
评论 # re: Java通用验证码程序及应用示例(提供源码下载) 2009-11-27 17:09 零全零美 多谢博主写出这么好的总结,如果能加上汉字验证码,会更完美! 回复 更多评论 # re ...
- java selector 源码_Java NIO核心组件-Selector和Channel
昨天我们介绍了一下SelectorProvider和IO multiplexing.特别是IO multiplexing中的epoll系统调用,是Linux版本的Java的NIO的核心实现. 那今天我 ...
- java图片转字符_java实现图片转字符图(看的过去的亚子)
普通图片转换为ASSIC码灰度图片 原图: 效果图: 转换方法 读取图片文件到BufferedImage 读取BufferedImage中的RGB值 将RGB三色值按照(0.3,0.59,0.11)权 ...
- java 图片 内存溢出_Java修改图片尺寸,总是报内存溢出怎么解决?
项目需求:有很多尺寸很大的图片(图片大小可能几十MB,甚至上百MB),需要等比例缩小它们的尺寸,相当于生成缩略图. 例如:原图8268x6201,需要压缩成400x300. 我现在的方法:将图片整个读 ...
- java 图片传输方式_Java图像传输方法
在研发B/S视频系统时候涉及到了图片在网络中的传输,研究了一些资料,也积累了部分经验: 一.序列化后传输 图像对象可以编码成指定图像格式文件保存在硬盘上,需要时再对其进行解码读入内存.但是除了这样还有 ...
- java中字节码_Java字节码浅析(三)
英文原文链接,译文链接,原文作者:James Bloom,译者:有孚 从Java7开始,switch语句增加了对String类型的支持.不过字节码中的switch指令还是只支持int类型,并没有增加对 ...
最新文章
- 2022-2028年中国集装箱涂料行业市场研究及前瞻分析报告
- linux中高并发socket最大连接数的优化详解
- 游戏角色口型老是对不上?这里有一个高效解决方案
- 关于二叉堆(优先队列)的其他操作及其应用
- vue delete删除json数组_vue面试题总结(二)
- mysql+安全性语言实验,实验四--数据库的安全性、完整性控制
- Node.js babel
- electron sqlite3_Electron+React+Antd工程搭建
- Hive MetaStore 配置
- java基础知识精讲视频教程百度云盘分享!
- 微星X470主板装机
- 使用Grafana+loki+promtail入门级部署分布式日志系统(windows环境)
- <爬虫> 豆瓣电影排行榜(含代码)
- 算法注册机编写扫盲---第五课
- Want to be happy? Be grateful - David Steindl-Rast
- 谷歌浏览器点击上传文件崩溃/上传图片崩溃/打开浏览文件未响应 解决方案
- wifi(华硕天选2)找不到怎么办
- PS四种扁平化设计风格-网摘
- python爬虫音乐图片的感受_python爬虫+词云图,爬取网易云音乐评论
- 韩国PAYWAVE认证之技术篇2