Java 加密解密之消息摘要算法(MD5 SHA MAC)



消息摘要

消息摘要(Message Digest)又称为数字摘要(Digital Digest)。

它是一个唯一相应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。假设消息在途中改变了。则接收者通过对收到消息的新产生的摘要与原摘要比較。就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。消息摘要採用单向Hash 函数将需加密 的明文"摘要"成一串128bit的密文。这一串密文亦称为数字指纹(Finger Print),它有固定的长度。且不同的明文摘要成密文,其结果总是不同的,而相同的明文其摘要必然一致 。这样这串摘要便可成为验证明文是否是"真身"的"指纹"了。 

 

HASH函数的抗冲突性使得假设一段明文稍有变化,哪怕仅仅更改该段落的一个字母,通过哈希算法作用后都将产生不同的值。

而HASH算法的单向性使得要找到到哈希值同样的两个不 同的输入消息。在计算上是不可能的。所以数据的哈希值。即消息摘要,能够检验数据的完整性。哈希函数的这样的对不同的输入能够生成不同的值的特性使得无法找到两个具有同样哈希值的输入。

因此。假设两个文档经哈希转换后成为同样的值,就能够肯定它们是同一文档。 所以。当希望有效地比較两个数据块时,就能够比較它们的哈希值。比如。能够通过比較邮件发送前和发送后的哈希值来验证该邮件在传递时是否改动。

消息摘要算法

消息摘要算法的主要特征是加密过程不须要密钥,而且经过加密的数据无法被解密,仅仅有输入同样的明文数据经过同样的消息摘要算法才干得到同样的密文。

消息摘要算法不存在 密钥的管理与分发问题,适合于分布式网络同样上使用。因为其加密计算的工作量相当可观,所以曾经的这样的算法通常仅仅用于数据量有限的情况下的加密。比如计算机的口令就是 用不可逆加密算法加密的。近年来,随着计算机同样性能的飞速改善,加密速度不再成为限制这样的加密技术发展的桎梏,因而消息摘要算法应用的领域不断添加。

消息摘要算法的特点:

① 不管输入的消息有多长,计算出来的消息摘要的长度总是固定的。

② 消息摘要看起来是“随机的”。

这些比特看上去是胡乱的杂凑在一起的。

③ 一般地。仅仅要输入的消息不同,对其进行摘要以后产生的摘要消息也必不同样;但同样的输入必会产生同样的输出。

④ 消息摘要函数是无陷门的单向函数,即仅仅能进行正向的信息摘要,而无法从摘要中恢复出不论什么的消息,甚至根本就找不到不论什么与原信息相关的信息。

⑤ 好的摘要算法。无法找到两条消息,是它们的摘要同样。

现有的消息摘要算法

消息摘要算法包括MD、SHA和MAC三大系列。经常使用于验证数据的完整性,是数据签名算法的核心算法。 

MAC与MD和SHA不同,MAC是含有密钥的散列函数算法。我们也常把MAC称为HMAC。

JDK对消息摘要算法的支持

JDK6支持MD2/MD5/SHA/SHA256/SHA384/SHA512/HmacMD5/HmacSHA1/ HmacSHA256/HmacSHA384/HmacSHA512

使用到 十六进制工具类Hex.java  见:   java byte数组与十六进制字符串互转

MD和SHA系列的java实现:

DigestUtils.java

Java代码  
  1. import java.security.MessageDigest;
  2. import java.security.NoSuchAlgorithmException;
  3. /**

posted on 2017-08-16 20:25 slgkaifa 阅读(...) 评论(...) 编辑 收藏

password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)的更多相关文章

  1. cooking java ——加密解密

    java安全与密码概述 主要分为三部分: 密码学基础,包括:相关术语:分类:常用安全体系. java的安全组成:jdk以及第三方扩展. 相关实现代码,包括:base64.MD5········ 密码学 ...

  2. Java加密解密相关

    关于解释加密解密中的填充方案: http://laokaddk.blog.51cto.com/368606/461279/ 关于对称加密中的反馈模式: http://blog.csdn.net/aaa ...

  3. Java加密解密大全

    ChinaSEI系列讲义(By 郭克华)   Java加密解密方法大全                     如果有文字等小错,请多包涵.在不盈利的情况下,欢迎免费传播. 版权所有.郭克华 本讲义经 ...

  4. java加密解密算法位运算

    一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...

  5. java加密解密的学习

    注:此文章只是对如何学习java加密解密技术做一个讲解.并不涉及具体的知识介绍,如果有需要请留言,有时间我补冲长.个人觉着学习一个学习方法比学习一个知识点更有价值的多. 首先,对于加密解密知识体系没有 ...

  6. Java加密解密字符串

    http://www.cnblogs.com/vwpolo/archive/2012/07/18/2597232.html Java加密解密字符串   旧文重发:http://www.blogjava ...

  7. java加密解密

    java加密解密 public class MD5Util { /** * @param args */ public static void main(String[] args) { System ...

  8. ◆JAVA加密解密-3DES

    从数据安全谈起       当你使用网银时,是否担心你的银行卡会被盗用?     当你和朋友用QQ进行聊天时,是否担心你的隐私会被泄露?     作为开发者,编写安全的代码比编写优雅的代码更重要,因为 ...

  9. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

随机推荐

  1. java第六节 字符串/集合

    /* *String类和StringBuffer类 * 位于java.lang包中 * String类对象中的内容一旦被初始化就不能再改变 * StringBuffer类中用于封装内容可以改变的字符串 ...

  2. 从html加载json文件想起

    原文来自:https://www.cnblogs.com/dibaosong/p/4572274.html#top 文中给出了data.json文件内容 还给出了html文件内容 ok. 1.新建工程 ...

  3. lamp环境服务器配置文档

    服务器配置命令开始(蓝色为输入命令,灰色为反馈内容): Yum update Reboot; yum -y install mysql mysql-server mysql-devel php php ...

  4. EF的表左连接方法Include和Join

    在EF中表连接常用的有Join()和Include(),两者都可以实现两张表的连接,但又有所不同. 例如有个唱片表Album(AlbumId,Name,CreateDate,GenreId),表中含外 ...

  5. Twitter Bootstrap 中文帮助文档

    http://wrongwaycn.github.io/bootstrap/docs/index.htmlTwitter Bootstrap 中文帮助文档 翻译得很不错~~~ 但是,还是要看英文文档 ...

  6. 如何调试makefile变量

    六.七年前写过一篇<跟我一起写Makefile>,直到今天,还有一些朋友问我一些Makefile的问题,老实说,我有一段时间没有用Makefile了,生疏了.回顾,这几年来大家问题我的问题 ...

  7. CStatic的透明背景方法

    原文链接: http://blog.sina.com.cn/s/blog_4a470fcc01000406.html 这篇文章中有些许错误,不过思路值得借鉴   如果在一个有颜色的窗体中创建一个CSt ...

  8. JPA学习笔记(8)——映射一对多关联关系

    一对多关联关系 本文有很多和多对一是一样的,因此不会写得非常具体. 有看不懂的.能够參考JPA学习笔记(7)--映射多对一关联关系 Order实体类 package com.jpa.helloworl ...

  9. Echarts 如何与 百度地图结合?

    官方demo:http://echarts.baidu.com/examples/editor.html?c=map-polygon 需要按顺序加载以下几个资源,然后就可以在echarts配置中使用 ...

  10. jmeter Best Practices

    性能测试最佳实践之JMeter 16. Best Practices 16.1 Always use latest version of JMeter The performance of JMete ...