风也温柔

计算机科学知识库

java md5加密解密算法 Java了解消息摘要算法

  包含SHA-1的FIPS PUB 180-2,于2002年以官方标准发布。2004年2月,发布了一次FIPS PUB 180-2的变更通知,加入了一个额外的变种SHA-224",这是为了符合双金钥3DES所需的金钥长度而定义。

  SHA-256和SHA-512是很新的杂凑函数,前者以定义一个word为32位元,后者则定义一个word为64位元。它们分别使用了不同的偏移量,或用不同的常数,然而,实际上二者结构是相同的,只在循环执行的次数上有所差异。SHA-224以及SHA-384则是前述二种杂凑函数的截短版,利用不同的初始值做计算。

  后续

  这些新的杂凑函数并没有接受像SHA-1一样的公众密码社群做详细的检验,也就是说,该算法内部的逻辑并未公布,所以它们的密码安全性还不被大家广泛的信任。

  和在2003年曾对这些新变种作过一些研究,声称他们没有找到弱点。

  国密算法SM3

  在这里插入图片描述

  是的,我们国家也有对应的摘要算法,我们称之为SM3。其实不能说系列,因为只有一个摘要算法,也就是上面说的SM3。

  国密算法是国家密码局制定标准的一系列算法。其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法等等。到目前为止已经有:SM1(对标AES)、SM2(对标RSA)、SM3(对标SHA-256)、SM4(自研"DES/AES"算法)、SM7(分组加密)、SM9(基于标识的非对称算法)等算法了。

  上述的六种算法,除了SM1和SM7未公开以外,其他的实现方式及步骤都可以在国家密码管理局的文档中找到。

  发布

  现在我们说回到SM3,在国家密码局的2010年12月17日的国家密码管理局关于发布《SM3密码杂凑算法》公告中,发布了SM3算法,其实现算法内部逻辑在网站的公告中有给出。

  在SM3的说明文档中是这么描述的:

  本文本规定了SM3密码杂凑算法的计算方法和计算步骤,并给出了运算示例。

  本文本适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。

  同时,本文本还可为安全产品生产商提供产品和技术的标准定位以及标准化的参考,提高安全产品的可信性与互操作性。

  后续

  后续自然是跟SHA-2一样,还没有人宣布破解。

  HMAC系列

  该系列原简称为MAC( Code - 消息认证码),不过由于其基于Hash运算的算法,所以也叫HMAC(Hash-based Code - 基于哈希运算消息认证码)。

  发展历史 背景

  由H.,M.,R.于1996年提出的一种基于Hash函数和密钥(注意这里的基于,表明HMAC算法是基于现行的Hash函数的,也就是上面提到的两个系列)进行消息认证的方法,并于1997年作为被公布,并在IPSec和其他网络协议(如SSL)中得以广泛应用,现在已经成为事实上的安全标准。它可以与任何迭代散列函数捆绑使用。

  随着的不断发展,网络安全问题日益突出。为了确保接收方所接收到的报文数据的完整性,人们采用消息认证来验证上述性质。用来对消息进行认证的主要方式有以下3种:

  消息认证码(带密钥的HAMC,以密钥和数据生成摘要)

  散列函数(上述的无密钥单向摘要算法,以数据生成摘要)

  消息加密(将整个消息加密,生成的密文作为摘要)。

  消息认证码:它是一个需要密钥的算法,可以对可变长度的消息进行认证,把输出的结果作为认证符,用来验证消息是否完整或者已被篡改(简单来说有点像加盐,把密钥也放到散列函数里)

  散列函数:它是将任意长度的消息映射成为定长的散列值的函数,以该散列值消息摘要)作为认证符。(上述提到的都已被宣布破解,SHA-2系列除外,因为其没有公开算法细节)

  消息加密:它将整个消息的密文作为认证符。(肉眼可见代价很大)

  发展

  近年来,人们越来越感兴趣于利用散列函数来设计MAC,原因有二:

  1、一般的散列函数的软件执行速度比分组密码的要快。

  2、密码散列函数的库代码来源广泛。这个广泛指的是,MAC算法可以跟任意的散列函数结合。

  根据上述的散列函数就可以知道,可以根据上述的系列的单个算法,获得一个HMAC的算法。

  比如MAC算法跟MD系列组合java md5加密解密算法java md5加密解密算法 Java了解消息摘要算法,可以得到、、三种算法

  跟SHA系列的算法有、、、、等五种。

  自然也可以跟SM3算法结合。

  HMAC是一种利用密码学中的散列函数来进行消息认证的一种机制,所能提供的消息认证包括两方面内容:

  ①消息完整性认证:能够证明消息内容在传送过程没有被修改。

  ②信源身份认证:因为通信双方共享了认证的密钥,接收方能够认证发送该数据的信源与所宣称的一致,即能够可靠地确认接收的消息与发送的一致。(有点类似于RSA非对称加密算法,可以根据数据内的信息,以确定信息是谁发过来的)

  后续

  HMAC是当前许多安全协议所选用的提供认证服务的方式,应用十分广泛,并且经受住了多种形式攻击的考验。并且就算上述的所有算法都被破解,只要有新的散列函数出现,我们就可以与之结合java md5加密解密算法,产生新的HMAC算法。

  本文小结

  消息摘要算法有众多的系列:MD系列,SHA系列、HMAC系列、以及独苗国密SM3。消息摘要算法从第一个MD2算法发布以来,不足四十年,公布内部逻辑的算法大都都被证实并不太安全。

  疑问

  但是为什么现在还是有人用那些不安全的算法?

  为什么没有人用破解工具,输入摘要自动破解出对应的信息呢?反而到现在大部分的破解都是通过彩虹表来获得呢?

  我唯一能想到的答案是:破解的代价与回报。

  这个很好理解,如果破解一个摘要数据的代价大到无法承受,那么我为什么不用彩虹表蒙一下呢。

  比如破解一个摘要的时间需要十几台电脑,没日没夜一年半载才能破解出来,那对于成千上万的数据,破解完要多久。况且我们没法保证对方生成的摘要没有自定义更改过。比如我生成的摘要,我自己再对这个摘要做了一些处理,比如换位、替换等等,那么破解这种数据得到的明文,自然毫无用处的。

  文章来源:https://blog.csdn.net/qq_44717657/article/details/126973720