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. 1万字!彻底看懂微信小程序

    Q:为什么说小程序如炮友? A:小程序刚发布不久就流行一个段子:APP如原配,一年不用几次:服务号如情人,一个月固定几次:订阅号如酒店小卡片,天天可以卖广告:小程序像炮友,用完就走. 资本如嫖客,各个 ...

  2. 使用CodePush实时更新 React Native 和 Cordova 应用

    近期公司的React native App(云订货)用上CodePush实时更新App技术了.棒棒的 CodePush 是微软开发的.能够实时更新 React Native 和 Cordova 应用. ...

  3. linux下淘宝安全控件问题

    2009-09-21  我的环境:ubuntu9.04 firefox3.0.14   下载压缩包http://blog.alipay.com/wp-content/2008/10/aliedit.t ...

  4. How to use, monitor, and disable transparent hugepages in Red Hat Enterprise Linux 6

    Resolution Note: Transparent Huge Pages are not available on the 32-bit version of RHEL 6. Transpare ...

  5. Mac系统清理、占用空间大、空间不够、查看系统文件大小分布

    背景: 最近老提示空间不够,很尴尬,一直弹系统提示 如图,256的空间,就剩下几个G了,其中最大头的系统占用:160G,占比60%多 正常情况下:我们可以点击管理,进入到系统磁盘优化界面: 这种适用于 ...

  6. BOOST ASIO 学习专贴

    本文已于20170903更新完毕,所有boost asio 代码均为本人手抄.编译器为vs2013,并且所有代码已经上传,本文下方可下载源码 为了学习boost asio库,我是从boost的官方bo ...

  7. 最新的 CocoaPods 的使用教程(一)

    发布开源库到CocoaPods的时候.对CocoaPods重新学习了一下. 1.CocoaPods的日常使用 2.创建CocoaPods的私有库 3.创建CocoaPods的开源库 一. CocoaP ...

  8. Linux下网卡混杂模式设置和取消

    工作中发现一个网卡工作状态不对了,查看了一下,发现这个网卡和正常工作的网卡  信息不一样,它显示的居然是混杂模式,而正常工作的是  running 模式 ,所以来了解下混杂模式怎么取消... 下文来自 ...

  9. 什么是分表和分区 MySql数据库分区和分表方法

    1.为什么要分表和分区 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性 ...

  10. Linux下mysql的远程连接(转)

    转载:http://www.cnblogs.com/fnlingnzb-learner/p/5830661.html 如果Mysql是按上篇的方法进行安装和设置的话,那进行远程连接就会稍微简单一点.我 ...