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;
- /**
-
相关阅读:
memcache内存估算整理
yii2-更改默认显示的通用主页
微信小程序开发工具中快捷键
微信个人公众号推广
[微信小程序]编译.wxss出错,2 not found
[转载]SSH框架搭建详细图文教程
网址收集
在IIS上新发布的网站,样式与js资源文件加载不到(资源文件和网页同一个域名下)
css与html基础收集
js与jq基础记录
- 原文地址:https://www.cnblogs.com/slgkaifa/p/7375638.html