password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)
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

- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- /**
-
posted on 2017-08-16 20:25 slgkaifa 阅读(...) 评论(...) 编辑 收藏
password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)的更多相关文章
- cooking java ——加密解密
java安全与密码概述 主要分为三部分: 密码学基础,包括:相关术语:分类:常用安全体系. java的安全组成:jdk以及第三方扩展. 相关实现代码,包括:base64.MD5········ 密码学 ...
- Java加密解密相关
关于解释加密解密中的填充方案: http://laokaddk.blog.51cto.com/368606/461279/ 关于对称加密中的反馈模式: http://blog.csdn.net/aaa ...
- Java加密解密大全
ChinaSEI系列讲义(By 郭克华) Java加密解密方法大全 如果有文字等小错,请多包涵.在不盈利的情况下,欢迎免费传播. 版权所有.郭克华 本讲义经 ...
- java加密解密算法位运算
一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...
- java加密解密的学习
注:此文章只是对如何学习java加密解密技术做一个讲解.并不涉及具体的知识介绍,如果有需要请留言,有时间我补冲长.个人觉着学习一个学习方法比学习一个知识点更有价值的多. 首先,对于加密解密知识体系没有 ...
- Java加密解密字符串
http://www.cnblogs.com/vwpolo/archive/2012/07/18/2597232.html Java加密解密字符串 旧文重发:http://www.blogjava ...
- java加密解密
java加密解密 public class MD5Util { /** * @param args */ public static void main(String[] args) { System ...
- ◆JAVA加密解密-3DES
从数据安全谈起 当你使用网银时,是否担心你的银行卡会被盗用? 当你和朋友用QQ进行聊天时,是否担心你的隐私会被泄露? 作为开发者,编写安全的代码比编写优雅的代码更重要,因为 ...
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha 加密解密,曾经是我一 ...
随机推荐
- 使用Cookie进行会话管理
javaweb学习总结(十一)——使用Cookie进行会话管理 一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. ...
- 【原创】kerberos无密码登录
通常在远程客户端上登录kerbros都需要密码,在学习hadoop的时候提到了ktutil这个工具,这里将使用方法贴出来. 用到的命令如下: 1.ktutil 2.add_entry -passwor ...
- weblogic服务目录迁移记录
weblogic服务,由于前期的规划不好,导致后期有点问题!为了更加规范运行服务及执行相关操作,故进行服务迁移... 先决条件:weblogic都是单个aminserver运行的,单个服务 问题解决: ...
- NRF24L01无线模块的使用
NRF2401芯片pin定义 NRF24L01模块pin定义 VCC 脚接电压范围为 1.9V~3.6V 之间, 不能在这个区间之外, 超过 3.6V 将会烧毁模块, 推荐电压 3.3V 左右 除电源 ...
- 【php】(转载)分享一个好用的php违禁词 处理类
1.直接上代码: <?php //定义编码 header( 'Content-Type:text/html;charset=utf-8 '); $words=array('我','你','他') ...
- windows 7 提示缺少D3DCOMPILER_47.dll的正确解决方法
下载 KB4019990补丁 我上传一下吧. 点击下载
- PHP 5.3版本上MS SQL Server的连接配置
折腾了好久,最后终于连接成功了! 注:我使用的的phpStudy. php.ini中配置: ;这是php中带的驱动 extension=php_sqlsrv.dll extension=php_pdo ...
- Python 中的__new__和__init__的区别
[同] 二者均是Python面向对象语言中的函数,__new__比较少用,__init__则用的比较多. [异] __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是 ...
- 优化 App 的启动时间
这是一篇 WWDC 2016 Session 406 的学习笔记,从原理到实践讲述了如何优化 App 的启动时间. App 运行理论 main() 执行前发生的事 Mach-O 格式 虚拟内存基础 M ...
- UNIX 家族及Linux
Unix成长为一个非私有的操作系统,是因为1956年的AT&T公司受命于联邦去经营电报电话服务.当然也可以开发软件,甚至那个软件可以有”合理”收费的许可证,但是这个公司却被禁止从事任何和计算机 ...