MD5是什么?

MD5是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的"数字指纹"。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被"篡改"过。

MD5到底有什么用?

当我们下载了文件后,如果想知道下载的这个文件和网站的原始文件是否一模一样,就可以给自己下载的文件做个MD5校验。如果得到的MD5值和网站公布的相同,可确认所下载的文件是完整的。如有不同,说明你下载的文件是不完整的:要么就是在网络下载的过程中出现错误,要么就是此文件已被别人修改。为防止他人更改该文件时放入病毒,最好不要使用。一般正规的站点,都会提供文件md5校验码,这是为了双方都方便。

今天上网搜索在Lucene如何避免重复建立索引,看到介绍了一种方法就是用MD5为每个文件赋一个惟一的值,当再次为同一个文件建立索引时,会通过MD5的值识别出相同的文件。于是收藏了MD5在java中使用的代码:

package com.mr.util;

import java.io.File;

import java.io.FileInputStream;

import java.security.MessageDigest;

/**

* @author CXY

*/

public class SecurityUtil {

/**

* 把字节数组转成16进位制数

* @param bytes

* @return

*/

public static String bytesToHex(byte[] bytes) {

StringBuffer md5str = new StringBuffer();

//把数组每一字节换成16进制连成md5字符串

int digital;

for (int i = 0; i < bytes.length; i++) {

digital = bytes[i];

if(digital < 0) {

digital += 256;

}

if(digital < 16){

md5str.append("0");

}

md5str.append(Integer.toHexString(digital));

}

return md5str.toString().toUpperCase();

}

/**

* 把字节数组转换成md5

* @param input

* @return

*/

public static String bytesToMD5(byte[] input) {

String md5str = null;

try {

//创建一个提供信息摘要算法的对象,初始化为md5算法对象

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

//计算后获得字节数组

byte[] buff = md.digest(input);

//把数组每一字节换成16进制连成md5字符串

md5str = bytesToHex(buff);

} catch (Exception e) {

e.printStackTrace();

}

return md5str;

}

/**

* 把字符串转换成md5

* @param str

* @return

*/

public static String strToMD5(String str) {

byte[] input = str.getBytes();

return bytesToMD5(input);

}

/**

* 把文件转成md5字符串

* @param file

* @return

*/

public static String fileToMD5(File file) {

if(file == null) {

return null;

}

if(file.exists() == false) {

return null;

}

if(file.isFile() == false) {

return null;

}

FileInputStream fis = null;

try {

//创建一个提供信息摘要算法的对象,初始化为md5算法对象

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

fis = new FileInputStream(file);

byte[] buff = new byte[1024];

int len = 0;

while(true) {

len = fis.read(buff, 0, buff.length);

if(len == -1){

break;

}

//每次循环读取一定的字节都更新

md.update(buff,0,len);

}

//关闭流

fis.close();

//返回md5字符串

return bytesToHex(md.digest());

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

}

md5使用方法 java_MD5在java中的使用相关推荐

  1. java中日期比较方法_在java中进行日期时间比较的4种方法

    1. Date.compareTo() java.util.Date 提供了在 Java 中比较两个日期的经典方法compareTo(). 如果两个日期相等,则返回值为0. 如果Date在date参数 ...

  2. 用画小狗的方法来解释Java中的值传递

    在开始看我画小狗之前,咱们先来看道很简单的题目: 下面程序的输出是什么? 如果你的回答是"小强",好,恭喜你答对了.下面我们改一下代码: 是的,我只是在changeName方法里面 ...

  3. java 同步的方法_关于Java中的同步方法

    我有一个关于Java中方法同步的问题. 考虑一个具有3个同步方法的类. class MyClass{ public synchronized void methodA(){ ... } public ...

  4. java main方法static_在java中为什么要把main方法定义为一个static方法?

    我们知道,在C/C++当中,这个main方法并不是属于某一个类的,它是一个全局的方法,所以当我们执行的时候,c++编译器很容易的就能找到这个main方法,然而当我们执行一个java程序的时候,因为ja ...

  5. Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法

    public static void main(String[] args) {} 或者 public static void main(String args[]) {} main方法是我们学习Ja ...

  6. java static修饰方法_浅析Java中static修饰符

    1.概述 static关键字的中文意思是静态的,该修饰符可以修饰字段.方法.内部类.使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的 ...

  7. java中如何使用add方法_使用Java中的Calendar.add()方法将秒添加到当前日期

    为Java中的Calendar类导入以下软件包.import java.util.Calendar; 首先,创建一个Calendar对象并显示当前日期和时间.Calendar calendar = C ...

  8. java 调用祖父方法_在Java中调用祖父母方法:您不能

    java 调用祖父方法 在文章保护的重点中,我详细介绍了"受保护"如何扩展"包私有"访问. 我在那儿写道: 你能做的是 覆盖子类中的方法或 使用关键字super ...

  9. java 废弃方法_在Java中使用Deprecated方法或类是错误的吗?

    Cats萌萌 术语来自官方的Sun词汇表:deprecation:指不再推荐的类,接口,构造函数,方法或字段,可能在将来的版本中不再存在.从何时何时弃用指南:您可能已经听过"自我贬低的幽默& ...

最新文章

  1. ref与out的区别
  2. SQL学习笔记 where子句用法,like关键字 嵌套查询
  3. MMinte:预测微生物群体内代谢物互作
  4. Linux及文件系统基本介绍
  5. struts文件上传,获取文件名和文件类型
  6. TCP/IP详解--TCP/IP中三次握手 四次握手状态分析
  7. Office2013 分享
  8. 类DefaultWsdl 11定义中英文对比API文档
  9. vba 跳到下一个循环_VBA野知识分享:从一个数组中取部分值生成新数组,不使用循环的思路...
  10. 简单的WINFORM窗体,体验WINFORM带来的快感
  11. all controls within the same view will share the same data Model
  12. Flask基础(03)--创建第一个Flask程序
  13. 最大化最小值 | | 最小化最大值
  14. Netty工作笔记0074---handler链调用机制实例1
  15. Web SQL本地数据库(SQLLite)
  16. Linux下TCP Socket编程实例
  17. php共享单车项目教学,共享单车怎么充电的
  18. 测试进阶必备,这5款http接口自动化测试工具简直不要太香~
  19. android设置EditText为不可编辑状态
  20. 网站移至俄语服务器日期错误_se7en3_新浪博客

热门文章

  1. 如何利用【小程序助手】小程序便捷管理自己的小程序
  2. request.js
  3. python爬虫(三)——多线程+正则匹配下载图片(wallheaven图片网站)
  4. Linux系统引导过程及修复
  5. 一招教你用Python让电脑死机的办法
  6. 四字节与浮点数之间的转换(c语言实现)
  7. [电路/定理] 移相电路-不用仿真也可以计算相位
  8. apache httpd下载安装步骤
  9. java实现简单的日历功能
  10. JavaScript高级程序设计红宝书学习笔记第三章基本概念