Java了解消息摘要算法

article/2025/9/27 15:36:25

Java了解消息摘要算法

  • 什么是消息摘要算法
  • 现行的消息摘要算法
    • MD系列
      • 发展历史
        • MD2算法
        • MD4算法
        • MD5算法
      • 后续
    • SHA系列
      • 发展历史
        • SHA-0 与 SHA-1
        • SHA-2
      • 后续
    • 国密算法SM3
      • 发布
      • 后续
    • HMAC系列
      • 发展历史
        • 背景
        • 发展
      • 后续
  • 本文小结
    • 疑问
  • 后续

什么是消息摘要算法

消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,可以被解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文

简单点来说就是:通过明文获取对应的密文。并且除去少数的消息摘要算法,其他的基本是不可逆的,也就是密文无法解密得到明文。而且一般来说密文比明文小的多
在这里插入图片描述

现行的消息摘要算法

现行的用得比较多的,应该是MD系列SHA系列国密SM3HMAC系列消息摘要算法比较多。为什么是系列?请听我慢慢道来。

MD系列

MD(Message Digest 消息摘要)应该是最早被广泛使用的消息摘要算法了。现在我们最熟悉的应该就是MD5算法了,比如存储密码或者一般的敏感数据时,基本都使用MD5算法。但这个系列之前还有几个版本:MD2MD4

发展历史

该系列算法(主要是MD5)目前被广泛应用于数据完整性校验、数据(消息)摘要、数据加密等方面。

MD2算法

Rivest在1989年开发出MD2算法 。在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。
就是发明RSA的那个家伙

然后,以一个16位的校验和追加到信息末尾,并且根据这个新产生的信息计算出散列值

后来,Rogier和Chauvaud发现如果忽略了校验和MD2将产生冲突。MD2算法加密后结果是唯一的(即不同信息加密后的结果不同) 。

MD4算法

为了加强算法的安全性Rivest1990年又开发出MD4算法 。MD4算法同样需要填补信息以确保信息的比特位长度减去448后能被512整除(信息比特位长度mod 512 = 448)。
然后,一个以64位二进制表示的信息的最初长度被添加进来。

信息被处理成512位damgard/merkle迭代结构的区块,而且每个区块要通过三个不同步骤的处理。

Den boerBosselaers以及其他人很快的发现了攻击MD4版本中第一步和第三步的漏洞。
在这里插入图片描述

Dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到MD4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果) 。

MD5算法

1991年,Rivest开发出技术上更为趋近成熟的MD5算法1992宣布替代之前的MD4算法,它在MD4的基础上增加了"安全带"(safety-belts)的概念。虽然MD5比MD4复杂度大一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。

在MD5算法中,信息-摘要的大小和填充的必要条件与MD4完全相同。Den boerBosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。

后续

不过比较可惜的是,1996年后该算法被证实存在弱点可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

SHA系列

SHA(Secure Hash Algorithm - 安全散列算法),是由美国国家安全局NSA)设计发布的摘要算法。
NSA
最初载明的算法于1993年发布,称做安全杂凑标准Secure Hash Standard),FIPS PUB 180,故而这个版本常被称为SHA-0

发展历史

SHA-0 与 SHA-1

SHA-0在发布之后很快就被NSA撤回,并且由1995年发布的修订版本FIPS PUB 180-1(通常称为SHA-1)取代。SHA-1SHA-0的算法只在压缩函数的讯息转换部分差了一个位元的循环位移

根据NSA的说法,它修正了一个在原始算法中会降低杂凑安全性的弱点

然而NSA并没有提供任何进一步的解释或证明该弱点已被修正。而后SHA-0和SHA-1的弱点相继被攻破,SHA-1似乎是显得比SHA-0有抵抗性,这多少证实了NSA当初修正算法以增进安全性的声明。

SHA-2

NISTNational Institute of Standards and Technology - 美国国家标准与技术研究院)发布了三个额外的SHA变体,这三个函数都将讯息对应到更长的讯息摘要
在这里插入图片描述

以它们的摘要长度(以位元计算)加在原名后面来命名:SHA-256SHA-384SHA-512

它们发布于2001年的FIPS PUB 180-2草稿中,随即通过审查和评论。

包含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一样的公众密码社群做详细的检验,也就是说,该算法内部的逻辑并未公布,所以它们的密码安全性还不被大家广泛的信任

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

国密算法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系列

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

发展历史

背景

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

随着Internet的不断发展,网络安全问题日益突出。为了确保接收方所接收到的报文数据的完整性,人们采用消息认证来验证上述性质。用来对消息进行认证的主要方式有以下3种:
消息认证码(带密钥的HAMC,以密钥和数据生成摘要)
散列函数(上述的无密钥单向摘要算法,以数据生成摘要)
消息加密(将整个消息加密,生成的密文作为摘要)。

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

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

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

发展

近年来,人们越来越感兴趣于利用散列函数来设计MAC,原因有二:
1、一般的散列函数的软件执行速度比分组密码的要快。
2、密码散列函数的库代码来源广泛。这个广泛指的是,MAC算法可以跟任意的散列函数结合。

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

比如MAC算法MD系列组合,可以得到HmacMD2HmacMD4HmacMD5三种算法

SHA系列的算法有HmacSHA1HmacSHA224HmacSHA256HmacSHA384HmacSHA512等五种。

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

HMAC是一种利用密码学中的散列函数来进行消息认证的一种机制,所能提供的消息认证包括两方面内容:
①消息完整性认证:能够证明消息内容在传送过程没有被修改。
②信源身份认证:因为通信双方共享了认证的密钥,接收方能够认证发送该数据的信源与所宣称的一致,即能够可靠地确认接收的消息与发送的一致。(有点类似于RSA非对称加密算法,可以根据数据内的信息,以确定信息是谁发过来的)

后续

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

本文小结

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

疑问

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

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

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

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

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

后续

Java各种摘要算法的工具类:在Java环境下各种常见摘要算法的工具类
Java自定义变换产生摘要数据:摘要的变换以及彩虹表攻击的防范


http://chatgpt.dhexx.cn/article/rna1n6fK.shtml

相关文章

散列算法(也叫:摘要算法)

散列算法(也叫:摘要算法): 特点:① 无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。② 消息摘要看起来是“随机的”。这些比特看上去是胡乱的杂凑在一起的。③ 一般地,只要输入的消息不同,对其…

信息摘要算法之一:MD5算法分析及实现

MD5即Message-DigestAlgorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。 1、MD5算法简介 MD5在90年代初由…

文档摘要自动提取算法——抽取式

文档摘要自动提取算法——抽取式 自动提取文档摘要的算法,主流方法分为两类:Extractive 抽取式、Abstractive 概要式。这篇我们主要将抽取式。 抽取式: 从原始文档集中抽取一些具有代表性的文本片段构成摘要,这些片段可以是整个文…

信息摘要算法之三:SHA256算法分析与实现

前面一篇中我们分析了SHA的原理,并且以SHA1为例实现了相关的算法,在这一片中我们将进一步分析SHA2并实现之。 1、SHA简述 前面的篇章中我们已经说明过,SHA实际包括有一系列算法,分别是SHA-1、SHA-224、SHA-256、SHA-384以及SHA-…

信息摘要算法之二:SHA1算法分析及实现

SHA算法,即安全散列算法(Secure Hash Algorithm)是一种与MD5同源的数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用。 1、概述 SHA算法…

常见的信息摘要和加密算法(原理+使用)

目录 散列(Hash)算法MD5MD5和Base64 SHA系列HMAC系列 对称加密算法DES3DESAES 非对称加密算法RSAECDHE 加密盐 散列(Hash)算法 MD5 MD5信息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以将任意数据产…

【加密算法】5 种常见的摘要、加密算法

大家平时的工作中,可能也在很多地方用到了加密、解密,比如: 用户的密码不能明文存储,要存储加密后的密文用户的银行卡号、身份证号之类的敏感数据,需要加密传输还有一些重要接口,比如支付,客户…

6、摘要提取算法

目前主要方法有: 基于统计:统计词频,位置等信息,计算句子权值,再简选取权值高的句子作为文摘,特点:简单易用,但对词句的使用大多仅停留在表面信息。基于图模型:构建拓扑…

视频摘要算法概述

DSNet: A Flexible Detect-to-Summarize Network for Video Summarization 论文 代码 不同于以往将视频摘要视为回归问题(没有考虑时间相关性和完整性约束),2021年,最早的考虑这两者。 视频摘要通常分为三步: 1、镜头…

信息摘要算法

Java常用的安全算法 目录概 述 LD is tigger forever,CG are not brothers forever, throw the pot and shine forever. Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor pe…

摘要算法(哈希算法)

1. HASH算法 哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。 哈希函数的主要作用不是完成数据加密与解密工作,它是用来检验数据完整性的重要技术,运算结果具有不可逆性。 通过哈希函数,可以为数据创建&…

五分钟搞懂摘要算法

一.摘要算法和摘要 1.概述 摘要算法又称哈希算法、散列算法。摘要也称哈希值,表示输入任意长度的数据,都会输出固定长度的数据。通过摘要算法(比如MDS和SHA-1)就可以得到该哈希值。 2.特点 长度固定,结果越长&#xff…

常用几种消息摘要算法

文章目录 1、MD5 (Message Digest algorithm 5 消息摘要算法版本5)2、SHA (Secure Hash Algorithm 安全散列算法)3、MAC (Hash Message Authentication Code 散列消息鉴别码) 消息摘要(Message Digest)又称为数字摘要(Digital Digest&#xf…

摘要算法与加密(以MD5算法为例)

【README】 部分内容总结自: 摘要与加密的区别(以MD5算法为例) - 掘金https://juejin.cn/post/6844903561478799368 【1】摘要算法与加密区别 【1.1】摘要算法(不可逆) 1)摘要算法: 说白了…

报文摘要算法

1 报文摘要算法 报文摘要算法是一种将任意长度报文转换成固定长度的报文摘要算法。它具有以下六个特点:能够作用于任意长度的报文;产生有限位数的标识信息;易于实现;具有单向性;具有抗碰撞性;具有高灵敏性…

摘要算法

摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入多少长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要&a…

JAVA摘要算法

数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。数据摘要算法也被称为哈希(Hash)算法、散列算法。…

摘要算法和加密算法

什么是摘要算法? 摘要算法就是哈希算法,将一条任意长度字符串转为32位的哈希值,是单向的,不能解密。常见的摘要算法有MD5和SHA,本文将用java对MD5算法进行实现。 摘要算法的用途? 1.登录密码的加密&…

三种摘要算法的简单介绍

原文地址: http://blog.csdn.net/u013991521/article/details/48193953 介绍: 消息摘要算法分为三类: MD(Message Digest):消息摘要 SHA(Secure Hash Algorithm):安全散列 MAC(Message Authentication Code)&…

数据分析之运营篇

文章目录 1.指标体系定目标 1.1根据运营的目的,选取不同的指标类型 1.2.北极星指标 1.3 用户留存指标 2.数据分析找问题 2.1.描述分析 2.2多维分析 2.3.相关性分析 2.4.方差分析 2.5 样本检验 2.6 预测分析 3. 3A3R做决策 3.1洞察 3.2获客 3.3.活跃…