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. 动态规划处理diff算法 Myers Diff (正向)

    Eugene W. Myers 在他1986年发表于"Algorithmica"的论文"An O(ND) Difference Algorithm and Its Var ...

  2. [转载]Ubuntu下Git服务器安装与配置

    原文地址:Ubuntu下Git服务器安装与配置作者:F民抄 1. 安装 1.1 安装Git-Core: sudo apt-get install git-core 1.2 安装 Gitosis sud ...

  3. 使用perf + FlameGraph生成进程火焰图

    FlameGraph代码:https://github.com/cobblau/FlameGraph 使用方法 1,perf record --call-graph dwarf -p 12345 2, ...

  4. vijos:旅行家的预算[贪心]

    题目 Problem description 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶 ...

  5. iOS 用自签名证书实现 HTTPS 请求的原理

    在16年的WWDC中,Apple已表示将从2017年1月1日起,所有新提交的App必须强制性应用HTTPS协议来进行网络请求.默认情况下非HTTPS的网络访问是禁止的并且不能再通过简单粗暴的向Info ...

  6. 线程同步之mutex和event区别

    之前只是用过 关键段来对同进程不同线程进行互斥,防止对同一份资源或代码段的竞争: mutex可以理解为不同进程或者同一进程内防止对同一份资源的竞争: event更多的是同步,当然也是不同进程或者同一进 ...

  7. 给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合

    给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合 ruby代码: def all_possible_arr arr, length = 5 ret = [] leng ...

  8. Windbg(2)

    摘抄于:http://www.cnblogs.com/awpatp/category/228209.html Debug相关的一些小技巧 摘要: 1. 如何Debug一个进程的子进程? 答: 使用Wi ...

  9. openstack XXX-api分析

    一.概述 RESTful API: 表征状态迁移,也就是说client端使用http的基本操作(主要四种:get, post, put, delete 对应增删改查)使服务端的资源状态转化: WSGI ...

  10. C# Httpclient客户端操作

    原文地址:https://www.cnblogs.com/Xujg/p/4113387.html HttpClient 当前主流用法,异步请求,自.NET4.5开始可从Nuget包管理中获取. usi ...