一、Hash函数

  哈希函数就是能将任意长度的数据映射为固定长度的数据的函数。哈希函数返回的值被叫做哈希值、哈希码、散列,或者直接叫做哈希。

二、消息摘要

    将长度不固定的消息(message)作为输入参数,运行特定的Hash函数,生成固定长度的输出,这个输出就是Hash,也称为这个消息的消息摘要(Message Digest)

信息摘要算法是hash算法的一种,具有以下特点:

  • 无论输入的消息有多长,计算出来的消息摘要的长度总是固定的,计算出的结果越长,一般认为该摘要算法越安全,MD5 128位 SHA-1 160位
  • 输入的消息不同,产生的消息摘要必不同,输入的消息相同,产生的消息摘要一定是相同的
  • 单向不可逆

三、MessageDigest

  java中通过MessageDigest来为程序提供消息摘要算法的功能,例如md5 和sha,这个经常会使用的到,这里就不多解释了

标记解释

  1. 通过入参的算法名获取MessageDigest实例,入参例如:MD2  MD5  SHA-1  SHA-256  SHA-384  SHA-512
  2. 指定的算法摘要的提供者,可通过Security.getProviders() 方法获取
  3. 使用指定的字节数组更新摘要
  4. 完成hash计算,只调用一次,在调用 digest()方法之后,MessageDigest 对象被重新设置成其初始状态
  5. 重置摘要

四、使用

  由于commons-codec包中已经封装好了一些使用的方法,引入依赖,直接调用即可

4.1、依赖

      <dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.4</version>
</dependency>

4.2、工具类

package com.treebear.starwifi.common.util;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; /**
* @author DUCHONG
* @since 2018-05-02 9:18
**/
public class EncryptionUtils { public static String base64Encode(String data){ return Base64.encodeBase64String(data.getBytes()); } public static byte[] base64Decode(String data){ return Base64.decodeBase64(data.getBytes()); } public static String md5(String data) { return DigestUtils.md5Hex(data); } public static String sha1(String data) { return DigestUtils.shaHex(data); } public static String sha256Hex(String data) { return DigestUtils.sha256Hex(data); } public static String getMD5File(File file){
FileInputStream fis=null;
try {
fis=new FileInputStream(file);
return DigestUtils.md5Hex(fis);
}
catch (IOException e) {
e.printStackTrace();
}
finally {
if(fis != null){
try {
fis.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
} public static void main(String[] args) { //long start= System.currentTimeMillis(); System.out.println(getMD5File(new File("F:\\temp\\WEB-INF.zip")));
System.out.println(getMD5File(new File("F:\\temp2\\WEB-INF.zip"))); //long end=System.currentTimeMillis(); //System.out.println("共耗时:"+(float)(end-start)/1000+"s");
}
}

  

Hash函数和消息摘要算法的更多相关文章

  1. 密码学Hash函数

    定义: Hash函数H将可变长度的数据块M作为输入,产生固定长度的Hash值h = H(M). 称M是h的原像.因为H是多对一的映射,所以对于任意给定的Hash值h,对应有多个原像.如果满足x≠y且H ...

  2. Apache Commons Codec 与消息摘要算法(hash算法)

    首先我们要明白 Codec 是什么含义.它是 Coder + decoder = Codec,也就是编码器解码器.即是编码器,也是解码器. 官网地址:http://commons.apache.org ...

  3. MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)

    MD5 编辑 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321( ...

  4. 消息摘要算法-HMAC算法

    一.简述 mac(Message Authentication Code.消息认证码算法)是含有密钥散列函数算法.兼容了MD和SHA算法的特性,并在此基础上加上了密钥.因此MAC算法也常常被称作HMA ...

  5. password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)

    Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest). 它是一个唯一相应一个消息或文本的固定长度 ...

  6. java学习-MD5消息摘要算法

    md5 属于hash算法一类,是不可逆的消息摘要算法.与对称加密和非对称加密算法不一样,不需要加密密钥. 注意: md5不是加密算法,只是将数据进行散列计算后生成一个唯一值的算法,没有加密密钥也没有解 ...

  7. java 加密之消息摘要算法

    简介 消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,即单向加密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文. 消息摘要算法不存在密钥的管理与分发问题,适 ...

  8. MD、SHA、MAC消息摘要算法实现与应用

    1.消息摘要概述 消息摘要(Message Digest)又称为数字摘要(Digital Digest).它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生 ...

  9. Hash函数的安全性

    我们为了保证消息的完整性,引进了散列函数,那么散列函数会对安全正造成什么影响呢?这是需要好好研究一番的问题. 三个概念: 1.如果y<>x,且h(x)=h(y),则称为碰撞. 2.对于给定 ...

随机推荐

  1. (转) 一次批量重启引发的Neutron网络故障

    现场回顾 故事发生于某个下午,采用 salt 更新某集群的 neutron.conf (log 相关配置项) 并批量重启 neutron-openvswitch-agent(以下简称 neutron- ...

  2. c3p0 数据库连接池相关知识

    c3p0数据库连接池的配置文件放在eclipse的src目录下,代码就可以识别. c3p0的配置文件的内容如下: <!-- Uncomment and set any of the option ...

  3. IOS开发--解析复杂json数据

    json的自我介绍:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅 ...

  4. 返回结果的HTTP状态码

    HTTP状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果. 2xx成功 2xx的响应结果表明请求被正常处理. 200 OK 请求已正常处理 204 No Content 请求处理成功,但是 ...

  5. linux设置开机自动进入命令模式

    1)打开终端,输入命令:      su – root     2)输入密码 3)再输入如下命令进入到命令行模式:      init 3 4)修改启动模式为永久命令行模式:      vi /etc ...

  6. MySQL 索引知识整理(创建高性能的索引)

    前言: 索引优化应该是对查询性能优化的最有效的手段了.索引能够轻易将查询性能提高几个数量级. // 固态硬盘驱动器有和机械硬盘启动器,有着完全不同的性能特性: 然而即使是固态硬盘,索引的原则依然成立, ...

  7. 如何学习html画布呢(canvas)

    我列出了canvas教学资源 http://www.gbtags.com/gb/gbliblist/1.htm  这是极客标签(不是极客学院) http://study.163.com/course/ ...

  8. java学习笔记 --- 多线程(线程安全问题——同步代码块)

    1.导致出现安全问题的原因: A:是否是多线程环境 B:是否有共享数据 C:是否有多条语句操作共享数据 2.解决线程安全问题方法: 同步代码块: synchronized(对象){ 需要同步的代码; ...

  9. C#文件操作常用相关类(Directory类、File类、Path类)

    1.文件操作常用相关类 1)File //操作文件,静态类,对文件整体操作.拷贝.删除.剪切等 2)Directory //操作目录(文件夹),静态类 3)DirectoryInfo //文件夹的一个 ...

  10. BEC translation exercise 7

    在挑选时我们完全出自疏忽而漏过了这篇短文.In making the selection we passed this short piece by quite inadvertently. we l ...