区块链100讲:据说,80%的人都搞不懂哈希算法

密码学基础(一)——哈希算法 由于哈希算法的单向性,可以从前一个数据块原文计算出下一个数据块所用的哈希值输入,但已知一个哈希值输入,难以反推出所有可能的数据块原文。哈希算法:哈希算法不可逆,包括:MD4、MD5、hash1、ripeMD160、SHA256、SHA3、Keccak256、国家标准SM3(国家密码管理局)哈希加“盐”(salt),所谓加“盐”,就是在明文的随机位置加上一串随机的字符串再进行hash,防止彩虹表攻击。加密/解密算法:加密解密算法可逆,但是必须要有秘钥,对称加密,非对称加密,数字签名算法DSA。 阅读详情

image

前面的《区块链100讲》介绍了区块链、算力、挖矿等,几乎每一讲都会提到一个词哈希(Hashing)。聊到区块链的时候也少不了会听到“哈希”、“哈希函数”、“哈希算法”,是不是听得一头雾水?别急,这一讲我们来讲讲什么是哈希算法。

1

哈希是一种加密算法

哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要(Message Digest)。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。

它的函数表达式为:h=H(m)

无论输入是什么数字格式、文件有多大,输出都是固定长度的比特串。以比特币使用的Sh256算法为例,无论输入是什么数据文件,输出就是256bit。

每个bit就是一位0或者1,256bit就是256个0或者1二进制数字串,用16进制数字表示的话,就是多少位呢?

16等于2的4次方,所以每一位16进制数字可以代表4位bit。那么,256位bit用16进制数字表示,当然是256除以4等于64位。

于是你通常看到的哈希值,就是这样的了:

00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8。

这是从btc.com上随便拷贝的一个哈希值,不放心的话你可以数一下,是不是64位~

2

Hash函数的特点

Hash函数具有如下特点。

  • 易压缩:对于任意大小的输入x,Hash值的长度很小,在实际应用中,函数H产生的Hash值其长度是固定的。

  • 易计算:对于任意给定的消息,计算其Hash值比较容易。

  • 单向性:对于给定的Hash值,要找到使得在计算上是不可行的,即求Hash的逆很困难。在给定某个哈希函数H和哈希值H(M)的情况下,得出M在计算上是不可行的。即从哈希输出无法倒推输入的原始数值。这是哈希函数安全性的基础。

  • 抗碰撞性:理想的Hash函数是无碰撞的,但在实际算法的设计中很难做到这一点。

    有两种抗碰撞性:一种是弱抗碰撞性,即对于给定的消息,要发现另一个消息,满足在计算上是不可行的;另一种是强抗碰撞性,即对于任意一对不同的消息,使得在计算上也是不可行的。

  • 高灵敏性:这是从比特位角度出发的,指的是1比特位的输入变化会造成1/2的比特位发生变化。消息M的任何改变都会导致哈希值H(M)发生改变。即如果输入有微小不同,哈希运算后的输出一定不同。

3

哈希算法

把网址A,转换成数字1。网址B,转换成数字2。

一个网址X,转换成数字N,根据数字N作为下标,就可以快速地查找出网址X的信息。这个转换的过程就是哈希算法。

比如这里有一万首歌,给你一首新的歌X,要求你确认这首歌是否在那一万首歌之内。

无疑,将一万首歌一个一个比对非常慢。但如果存在一种方式,能将一万首歌的每首数据浓缩到一个数字(称为哈希码)中,于是得到一万个数字,那么用同样的算法计算新的歌X的编码,看看歌X的编码是否在之前那一万个数字中,就能知道歌X是否在那一万首歌中。

作为例子,如果要你组织那一万首歌,一个简单的哈希算法就是让歌曲所占硬盘的字节数作为哈希码。这样的话,你可以让一万首歌“按照大小排序”,然后遇到一首新的歌,只要看看新的歌的字节数是否和已有的一万首歌中的某一首的字节数相同,就知道新的歌是否在那一万首歌之内了。

一个可靠的哈希算法,应该满足:

  • 对于给定的数据M,很容易算出哈希值X=F(M);

  • 根据X很难反算出M;

  • 很难找到M和N使得F(N)=F(M)

前面提到哈希函数具有抗碰撞性,碰撞性就是指有人实现找出一奇一偶使得哈希结果一致,但这在计算上是不可行的。

首先,把大空间的消息压缩到小空间上,碰撞肯定是存在的。假设哈希值长度固定为256位,如果顺序取1,2,…2^256+1, 这2^256+1个输入值,逐一计算其哈希值,肯定能找到两个输入值使得其哈希值相同。但不要高兴的太早,因为你得有时间把它算出来,才是你的。

根据生日悖论,如果随机挑选其中的2^128+1输入,则有99.8%的概率发现至少一对碰撞输入。那么对于哈希值长度为256位的哈希函数,平均需要完成2^128次哈希计算,才能找到碰撞对。如果计算机每秒进行10000次哈希计算,需要约10^27年才能完成2^128次哈希计算。在区块链中,哈希函数的抗碰撞性用来做区块和交易的完整性验证,一有篡改就能被识别出来。

前面提到挖矿需要矿工通过随机数不断计算得到小于给定难度值的数值。难度值(difficulty)是矿工们挖矿时的重要参考指标,它决定了矿工大约需要经过多少次哈希运算才能产生一个合法的区块。比特币的区块大约每10分钟生成一个,为了让新区块的产生基本保持这个速率,难度值必须根据全网算力的变化进行调整。

哈希函数通过调整难度值来确保每个区块挖出的时间都大约在10分钟,哈希函数计算的难度值对保证区块链系统的安全意义重大。正如美国的几位计算机科学家在共同所著的书中所写的:“哈希密码是密码学中的瑞士军刀,它们在众多各具特色的应用中找到了一席之地,为了保证安全,不同的应用会要求不同的哈希函数特点。事实已经证明,要确定一系列哈希函数以全面达成可证安全极度困难。”

工作量证明需要有一个目标值。比特币工作量证明的目标值(target)的计算公式如下:

目标值=最大目标值 / 难度值

其中,最大目标值为一个恒定值:

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

目标值的大小与难度值成反比。比特币工作量证明的达成就是矿工计算出来的区块哈希值必须小于目标值。

我们也可以简单理解成,比特币工作量证明的过程,就是通过不停地变换区块头(即尝试不同的随机值)作为输入进行SHA256哈希运算,找出一个特定格式哈希值的过程(即要求有一定数量的前导0)。而要求的前导0的个数越多,代表难度越大。

4

举个栗子帮助理解

▌场景一、小星和阿呆在篮球场

小星:阿呆,你是不是口渴了,你要不要去买水喝,顺便帮我买一瓶哈。

阿呆:呵呵,你的小心思我还不知道,你自己也口渴了吧,你去,我不去。

小星:哎哎,咱们不扯这些没用的,来抛硬币,好不好,正面你去,反面我去,公平吧,如何?

阿呆:好吧。

………

▌场景二、小星与阿呆即时聊天中

阿呆:小星,今天来我家玩,来的路上,有一家披萨店,很好吃,顺便带一点哈。

小星:哦,要不你来我家玩吧,你顺便带上披萨。

阿呆:小星,你竟然都这么说了,看来只能抛硬币解决了。

小星:丫的,这个怎么抛,我怎么知道你有没有搞鬼。

阿呆:嗯,那到也是,要不这样。

1.考虑对结果加密

阿呆:我心中想一个数,假设为A,然后A在乘以一个数B,得到结果C。A是我的密钥,我把结果C告诉你。你来猜A是奇数还是偶数,猜中了,算你赢。

小星:这不行,如果你告诉我C是12,我猜A是奇数,你可以说A是4,B是3。我猜A是偶数,你可以说A是3,B是4。要不你告诉我C是多少的时候,也告诉我B是多少。

阿呆:那这不行,告诉你C和B,不等于告诉你A是多少了,还猜个屁。不行得换个方式。

2.不可逆加密

阿呆:小星,你看这样可以不,我想一个A,经过下面的过程:

1.A+123=B
2.B^2=C
3.取C中第2~4位数,组成一个3位数D
4.D/12的结果求余数,得到E

阿呆:我把E和上述计算方式都告诉你,你猜A是奇数还是偶数,然后我告诉你A是多少,你可以按上述的计算过程来验证我是否有说谎。

小星:嗯,我想想,假如阿呆你想的A为5,那么:

5+123=128
128^2=16384
D=638 E=638mod12=53

(mod表示除法的求余数)

小星:咦,厉害了,一个A值对应一个唯一的E值,根据E还推算不出来A。你太贱了,好吧,这个算公平,谁撒谎都能被识别出来。

小星:阿呆,你出题吧 ……

这种丢掉一部分信息的加密方式称为“单向加密”,也叫哈希算法。

5

常见的哈希算法

1、SHA-1算法

SHA-1的输入是最大长度小于264位的消息,输入消息以512位的分组为单位进行处理,输出是160位的消息摘要。SHA-1具有实现速度高、容易实现、应用范围广等优点,其算法描述如下。

  • 对输入的消息进行填充:经过填充后,消息的长度模512应与448同余。填充的方式为第一位是1,余下各位都为0。再将消息被填充前的长度以big-endian的方式附加在上一步留下的最后64位中。该步骤是必须的,即使消息的长度已经是所希望的长度。填充的长度范围是1到512。

  • 初始化缓冲区:可以用160位来存放Hash函数的初始变量、中间摘要及最终摘要,但首先必须进行初始化,对每个32位的初始变量赋值,即:

image

  • 进入消息处理主循环,处理消息块:一次处理512位的消息块,总共进行4轮处理,每轮进行20次操作,如图所示。这4轮处理具有类似的结构,但每轮所使用的辅助函数和常数都各不相同。每轮的输入均为当前处理的消息分组和缓冲区的当前值A、B、C、D、E,输出仍放在缓冲区以替代旧的A、B、C、D、E的值。第四轮的输出再与第一轮的输入CVq相加,以产生CVq+1,其中加法是缓冲区5个字CVq中的每个字与中相应的字模232相加。

image

图 单个512位消息块的处理流程

  • 输出:所有的消息分组都被处理完之后,最后一个分组的输出即为得到的消息摘要值。

SHA-1的步函数如图所示,它是SHA-1最为重要的函数,也是SHA-1中最关键的部件。

image

图 SHA-1的步函数

SHA-1每运行一次步函数,A、B、C、D的值就会依次赋值给B、C、D、E这几个寄存器。同时,A、B、C、D、E的输入值、常数和子消息块在经过步函数运算后就会赋值给A。

image

其中,t是步数,0≤t≤79,Wt是由当前512位长的分组导出的一个32位的字,Kt是加法常量。

基本逻辑函数f的输入是3个32位的字,输出是一个32位的字,其函数表示如下。

image

image

对于每个输入分组导出的消息分组wt,前16个消息字wt(0≤t≤15)即为消息输入分组对应的16个32位字,其余wt(0≤t≤79)可按如下公式得到:

image

其中,ROTLs表示左循环移位s位,如图所示。

image

图 SHA-1的80个消息字的产生过程

2、SHA-2算法

SHA-2系列Hash算法,其输出长度可取SHA-2系列哈希算法的输出长度可取224位、256位、384位、512位,分别对应SHA-224、SHA-256、SHA-384、SHA-512。它还包含另外两个算法:SHA-512/224、SHA-512/256。比之前的Hash算法具有更强的安全强度和更灵活的输出长度,其中SHA-256是常用的算法。下面将对前四种算法进行简单描述。

SHA-256算法

SHA-256算法的输入是最大长度小于264位的消息,输出是256位的消息摘要,输入消息以512位的分组为单位进行处理。算法描述如下。

(1)消息的填充

添加一个“1”和若干个“0”使其长度模512与448同余。在消息后附加64位的长度块,其值为填充前消息的长度。从而产生长度为512整数倍的消息分组,填充后消息的长度最多为264位。

(2)初始化链接变量

链接变量的中间结果和最终结果存储于256位的缓冲区中,缓冲区用8个32位的寄存器A、B、C、D、E、F、G和H表示,输出仍放在缓冲区以代替旧的A、B、C、D、E、F、G、H。首先要对链接变量进行初始化,初始链接变量存储于8个寄存器A、B、C、D、E、F、G和H中:

image

初始链接变量是取自前8个素数(2、3、5、7、11、13、17、19)的平方根的小数部分其二进制表示的前32位。

(3)处理主循环模块

消息块是以512位分组为单位进行处理的,要进行64步循环操作(如图所示)。每一轮的输入均为当前处理的消息分组和得到的上一轮输出的256位缓冲区A、B、C、D、E、F、G、H的值。每一步中均采用了不同的消息字和常数,下面将给出它们的获取方法。

image

图 SHA-256的压缩函数

(4)得出最终的Hash值

所有512位的消息块分组都处理完以后,最后一个分组处理后得到的结果即为最终输出的256位的消息摘要。

步函数是SHA-256中最为重要的函数,也是SHA-256中最关键的部件。其运算过程如图所示。

image

图 SHA-256的步函数

image

根据T1、T2的值,对寄存器A、E进行更新。A、B、C、E、F、G的输入值则依次赋值给B、C、D、F、G、H。

image

image

Kt的获取方法是取前64个素数(2,3,5,7,……)立方根的小数部分,将其转换为二进制,然后取这64个数的前64位作为Kt。其作用是提供了64位随机串集合以消除输入数据里的任何规则性。

对于每个输入分组导出的消息分组Wt,前16个消息字Wt(0≤t≤15)直接按照消息输入分组对应的16个32位字,其他的则按照如下公式来计算得出:

image

图 SHA-256的64个消息字的生成过程

SHA-512算法

SHA-512是SHA-2中安全性能较高的算法,主要由明文填充、消息扩展函数变换和随机数变换等部分组成,初始值和中间计算结果由8个64位的移位寄存器组成。该算法允许输入的最大长度是2128位,并产生一个512位的消息摘要,输入消息被分成若干个1024位的块进行处理,具体参数为:消息摘要长度为512位;消息长度小于2128位;消息块大小为1024位;消息字大小为64位;步骤数为80步。下图显示了处理消息、输出消息摘要的整个过程,该过程的具体步骤如下。

image

图 SHA-512的整体结构

  • 消息填充:填充一个“1”和若干个“0”,使其长度模1024与896同余,填充位数为0-1023,填充前消息的长度以一个128位的字段附加到填充消息的后面,其值为填充前消息的长度。

  • 链接变量初始化:链接变量的中间结果和最终结果都存储于512位的缓冲区中,缓冲区用8个64位的寄存器A、B、C、D、E、F、G、H表示。初始链接变量也存储于8个寄存器A、B、C、D、E、F、G、H中,其值为:

image

初始链接变量采用big-endian方式存储,即字的最高有效字节存储于低地址位置。初始链接变量取自前8个素数的平方根的小数部分其二进制表示的前64位。

  • 主循环操作:以1024位的分组为单位对消息进行处理,要进行80步循环操作。每一次迭代都把512位缓冲区的值A、B、C、D、E、F、G、H作为输入,其值取自上一次迭代压缩的计算结果,每一步计算中均采用了不同的消息字和常数。

  • 计算最终的Hash值:消息的所有N个1024位的分组都处理完毕之后,第N次迭代压缩输出的512位链接变量即为最终的Hash值。

步函数是SHA-512中最关键的部件,其运算过程类似SHA-256。每一步的计算方程如下所示,B、C、D、F、G、H的更新值分别是A、B、C、E、F、G的输入状态值,同时生成两个临时变量用于更新A、E寄存器。

image

对于80步操作中的每一步t,使用一个64位的消息字Wt,其值由当前被处理的1024位消息分组Mi导出,导出方法如图所示。前16个消息字Wt(0≤t≤15)分别对应消息输入分组之后的16个32位字,其他的则按照如下公式来计算得出:

image

图 SHA-512的80个消息字生成的过程

其中,

image

式中,ROTRn(X)表示对64位的变量x循环右移n位,SHRn(X)表示对64位的变量x右移n位。

从图可以看出,在前16步处理中,Wt的值等于消息分组中相对应的64位字,而余下的64步操作中,其值是由前面的4个值计算得到的,4个值中的两个要进行移位和循环移位操作。

Kt的获取方法是取前80个素数(2,3,5,7,……)立方根的小数部分,将其转换为二进制,然后取这80个数的前64位作为Kt,其作用是提供了64位随机串集合以消除输入数据里的任何规则性。

SHA-224与SHA-384

SHA-256和SHA-512是很新的Hash函数,前者定义一个字为32位,后者则定义一个字为64位。实际上二者的结构是相同的,只是在循环运行的次数、使用常数上有所差异。SHA-224及SHA-384则是前述两种Hash函数的截短型,它们利用不同的初始值做计算。

SHA-224的输入消息长度跟SHA-256的也相同,也是小于264位,其分组的大小也是512位,其处理流程跟SHA-256也基本一致,但是存在如下两个不同的地方。

  • SHA-224的消息摘要取自A、B、C、D、E、F、G共7个寄存器的比特字,而SHA-256的消息摘要取自A、B、C、D、E、F、G、H共8个寄存器的32比特字。

  • SHA-224的初始链接变量与SHA-256的初始链接变量不同,它采用高端格式存储,但其初始链接变量的获取方法是取前第9至16个素数(23、29、31、37、41、43、47、53)的平方根的小数部分其二进制表示的第二个32位,SHA-224的初始链接变量如下:

image

SHA-224的详细计算步骤与SHA-256一致。

SHA-384的输入消息长度跟SHA-512相同,也是小于2128位,而且其分组的大小也是1024位,处理流程跟SHA-512也基本一致,但是也有如下两处不同的地方。

  • SHA-384的384位的消息摘要取自A、B、C、D、E、F共6个64比特字,而SHA-512的消息摘要取自A、B、C、D、E、F、G、H共8个64比特字。

  • SHA-384的初始链接变量与SHA-512的初始链接变量不同,它也采用高端格式存储,但其初始链接变量的获取方法是取前9至16个素数(23、29、31、37、41、43、47、53)的平方根的小数部分其二进制表示的前64位,SHA-384的初始链接变量如下:

image

SHA-384的详细计算步骤与SHA-512的相同。

3、SHA-3算法

SHA-3算法整体采用Sponge结构,分为吸收和榨取两个阶段。SHA-3的核心置换f作用在5×5×64的三维矩阵上。整个f共有24轮,每轮包括5个环节θ、ρ、π、χ、τ。算法的5个环节分别作用于三维矩阵的不同维度之上。θ环节是作用在列上的线性运算;ρ环节是作用在每一道上的线性运算,将每一道上的64比特进行循环移位操作;π环节是将每道上的元素整体移到另一道上的线性运算;χ环节是作用在每一行上的非线性运算,相当于将每一行上的5比特替换为另一个5比特;τ环节是加常数环节。

目前,公开文献对SHA-3算法的安全性分析主要是从以下几个方面来展开的。

  • 对SHA-3算法的碰撞攻击、原像攻击和第二原像攻击。

  • 对SHA-3算法核心置换的分析,这类分析主要针对算法置换与随机置换的区分来展开。

  • 对SHA-3算法的差分特性进行展开,主要研究的是SHA-3置换的高概率差分链,并构筑差分区分器。

Keccak算法的立体加密思想和海绵结构,使SHA-3优于SHA-2,甚至AES。Sponge函数可建立从任意长度输入到任意长度输出的映射。

4、RIPEMD160算法

RIPEMD(RACE Integrity Primitives Evaluation Message Digest),即RACE原始完整性校验消息摘要。RIPEMD使用MD4的设计原理,并针对MD4的算法缺陷进行改进,1996年首次发布RIPEMD-128版本,它在性能上与SHA-1相类似。

RIPEMD-160是对RIPEMD-128的改进,并且是RIPEMD中最常见的版本。RIPEMD-160输出160位的Hash值,对160位Hash函数的暴力碰撞搜索攻击需要280次计算,其计算强度大大提高。RIPEMD-160的设计充分吸取了MD4、MD5、RIPEMD-128的一些性能,使其具有更好的抗强碰撞能力。它旨在替代128位Hash函数MD4、MD5和RIPEMD。

RIPEMD-160使用160位的缓存区来存放算法的中间结果和最终的Hash值。这个缓存区由5个32位的寄存器A、B、C、D、E构成。寄存器的初始值如下所示:

image

数据存储时采用低位字节存放在低地址上的形式。

处理算法的核心是一个有10个循环的压缩函数模块,其中每个循环由16个处理步骤组成。在每个循环中使用不同的原始逻辑函数,算法的处理分为两种不同的情况,在这两种情况下,分别以相反的顺序使用5个原始逻辑函数。每一个循环都以当前分组的消息字和160位的缓存值A、B、C、D、E为输入得到新的值。每个循环使用一个额外的常数,在最后一个循环结束后,两种情况的计算结果A、B、C、D、E和A′、B′、C′、D′、E′及链接变量的初始值经过一次相加运算产生最终的输出。对所有的512位的分组处理完成之后,最终产生的160位输出即为消息摘要。

除了128位和160位的版本之外,RIPEMD算法也存在256位和320位的版本,它们共同构成RIPEMD家族的四个成员:RIPEMD-128、RIPEMD-160、RIPEMD-256、RIPEMD-320。其中128位版本的安全性已经受到质疑,256位和320位版本减少了意外碰撞的可能性,但是相比于RIPEMD-128和RIPEMD-160,它们不具有较高水平的安全性,因为他们只是在128位和160位的基础上,修改了初始参数和s-box来达到输出为256位和320位的目的。

内容来源:

公众号:区块链及加密货币研究、EXV星球、区块链艾迪生

华章图书:《链接未来:迎接区块链与数字资产的新时代》《区块链开发指南》

以下是我们的社区介绍,欢迎加入各种合作、交流、学习)

image

量子安全哈希算法在软件数据完整性校验中的集成 量子安全哈希算法(Post-Quantum Hash, PQH)通过数学抗量子攻击机制,有效解决了传统哈希算法在量子计算威胁下的脆弱性问题。其核心在于采用抗量子碰撞的加密函数,例如基于格密码(Lattice-based)或哈希签名组合的构造方法。例如,基于SPHINCS+的哈希算法在256位安全强度下,计算开销是SHA-256的3-5倍(未来三年将迎来关键突破期:2024年完成主要行业标准的制定,2025年实现PQH算法的硬件成本下降50%,2026年建成全球首个量子安全云生态(计算加速依赖专用硬件。 阅读详情

相关推荐

从生日悖论到哈希碰撞:Python模拟生日攻击与区块链安全启示

哈希函数是密码学和计算机安全的核心基础组件,它将任意长度的数据映射为固定长度的摘要,具有单向性和抗碰撞性等关键特性。其核心原理基于数学上的困难问题,确保无法从哈希值反推原始输入,且极难找到两个不同输入产生相同输出。这一特性为数据完整性验证、数字签名和身份认证提供了技术基石,广泛应用于软件分发、密码存储和区块链等领域。生日攻击正是利用概率论中的生日悖论,通过寻找哈希碰撞来挑战其安全性。本文通过Python模拟实验,直观展示了生日攻击的原理与实现,并深入探讨了其对SHA-256等算法在比特币和区块链中安全模型的

weixin_33698043的博客 454

hash算法原理详解

一.概念 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。 哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。 使用哈希查找有两个步骤: 1. 使用哈希函数将被

至道 25万+

MD5哈希算法深度解析:原理、应用场景与安全实践指南

哈希函数是计算机科学中用于将任意长度数据映射为固定长度摘要的核心技术,其核心原理在于单向性和抗碰撞性,确保数据完整性与唯一标识。在密码学与数据完整性校验领域,哈希算法发挥着不可替代的技术价值,广泛应用于文件校验、数据去重、缓存系统等工程实践。然而,随着计算能力的提升,早期算法如MD5已被证实存在碰撞攻击漏洞,这促使了更安全的SHA-256等算法成为新标准。尽管如此,MD5因其速度快、实现简单的特点,在非安全敏感场景如缓存键生成、负载均衡和数据去重中仍有其应用空间。本文聚焦MD5算法的设计思想、内部结构拆解,

weixin_30271335的博客 457

常见的hash算法及其原理

 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。   哈希表是根据设定...

Beyond_2016的博客 28万+

哈希算法教程(个人总结版)

哈希算法(Hash Algorithm)是一种将任意长度的输入(也称为消息)转换为固定长度的输出(也称为哈希值、散列值、摘要)的算法。SHA-256(Secure Hash Algorithm 256-bit)是SHA-2(Secure Hash Algorithm 2)家族中的一种,广泛应用于安全性要求较高的场景,如区块链、数字签名等。散列函数用于哈希表(Hash Table)等数据结构中,将数据映射到固定大小的数组上,以实现高效的数据存储和检索。哈希算法可以用于数据库的索引,提高数据检索的效率。

年糕的博客 5715

MD5 哈希算法深度详解:原理、漏洞与 C# 实现

很多开发者做文件校验时直接上手 MD5,却不知它早在 2004 年就被王小云教授破解,存在致命碰撞漏洞。本文基于 RFC 1321,从数据填充、512 位分组到四轮 64 步运算,完整拆解 MD5 原理;结合 Flame 病毒伪造证书案例揭示安全隐患。同时对比 SHA-256 与国密 SM3 替代方案,附赠零依赖 C# 原生手写代码,覆盖空字符串、大文件、中文文本场景。文末整理面试高频考点与项目选型建议,助力后端开发与面试备考。

工业上位机开发工程师,专注C#底层算法与工控仪器开发。从零手写信号滤波、曲线拟合、机器视觉、排序与密码学哈希,纯原生实现零第三方库,附数学推导与可编译源码,可移植STM32/PLC。 1727

hash算法详解

散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。

Rocky006的博客 1万+

小程序结合Three.js与gsap:打造流畅3D动画的完整指南

本文详细介绍了如何在小程序中整合Three.js与GSAP动画库,打造流畅的3D动画效果。通过从环境搭建、基础场景创建到模型加载与复杂动画编排的完整指南,帮助开发者克服小程序性能限制,实现如商品360度展示等沉浸式交互体验,提升产品视觉吸引力。

python9snake的博客 548

Java中SHA-3哈希算法详解:从原理到实战应用

哈希算法是信息安全领域的核心基础技术,用于确保数据的完整性和唯一性。其原理是将任意长度的输入通过特定计算转换为固定长度的输出,具备单向性和抗碰撞性。在Java生态中,哈希算法广泛应用于密码存储、数据完整性校验和数字签名等场景。随着SHA-3算法的标准化,其基于海绵结构的设计提供了与SHA-2不同的安全特性。本文聚焦于Java中SHA-3的实现,涵盖其核心原理、版本兼容性及在密码存储和数据校验中的实际应用,帮助开发者在项目中做出合适的技术选型。

weixin_34302798的博客 306

5-DOF机械臂课程设计(一)之正逆运动学

文章目录基本要求基本概念关节坐标系的建立正运动学求解DH参数表的建立逆运动学求解多解下解的选取源码下载后续 基本要求 ​ 开发上位机程序,要求有良好的界面,能提供关节空间下和笛卡尔坐 标下表示的目标位姿点和中间若干经过点的输入功能,进行轨迹规划, 并控制机械臂沿轨迹运动,最终完成目标抓取的任务。 基本概念 连杆长度 :2个相邻关节轴线之间的距离 连杆扭角 :2个相邻关节轴线之间的角度 连杆偏距 :2个关节坐标系的X轴之间的距离 关节角度 :关节变量 计算时需要加初始角度偏移 关节坐标系的建立 ​ 根据《机

Rosen的博客 5859

QGC二次开发实战指南(一):从零构建自定义地面站界面

本文详细介绍了QGC二次开发实战指南,从零开始构建自定义地面站界面。通过QT和QML技术结合MAVLINK协议,开发者可以打造适合特定业务场景的无人机监控系统,提升操作效率与用户体验。文章包含环境搭建、界面设计、数据绑定等完整开发流程,是QGC二次开发的实用教程。

weixin_28693683的博客 496

SHA-1与SHA-256:哈希算法演进、核心差异与工程迁移实践

哈希算法作为生成数据“数字指纹”的核心密码学原语,其核心使命在于提供抗碰撞性、原像攻击抗性等安全保障,以确保数据的完整性与来源可信。其原理是将任意长度输入通过压缩函数映射为固定长度摘要,这一特性使其在数字签名、证书校验、数据完整性验证等场景中不可或缺。随着计算能力提升与密码分析进步,早期广泛采用的SHA-1算法已被证实存在实际碰撞攻击风险,其安全根基出现裂缝。因此,行业标准已全面转向更安全的SHA-256算法,它通过更长的输出长度(256位)、更复杂的内部轮函数设计,大幅提升了理论安全强度与对抗差分攻击等密

weixin_30788239的博客 496

Windows游戏玩家必看:用Process Lasso优化CPU优先级和核心绑定,告别卡顿

本文为Windows游戏玩家详细介绍了如何使用Process Lasso优化系统性能。通过设置CPU优先级和核心绑定,可以智能管理进程资源,确保游戏获得最高调度权限,有效减少因后台程序干扰或Windows调度机制不完善导致的卡顿与帧数波动,从而提升游戏流畅度与稳定性。

weixin_29299807的博客 2222

区块链:用数学重构信任的数字文明基石

区块链的本质,是将"人为认定的事实"转化为"数学证明的事实"。从沃尔玛2.2秒完成的食品溯源,到江西区块链平台20分钟办结的房产交易,从拼多多AI品控的木瓜评级,到特斯拉的智能故障预警,这台"事实机器"正在用不可篡改的数据、自动化的规则、分布式的协作,解决传统世界的信任难题。未来,随着跨链技术打破数据壁垒,AI与物联网丰富"事实来源",区块链将构建起覆盖物理世界与数字空间的"全链条可信网络"。

2401_82363370的博客 1818

ABAP 后台作业里的消息机制:把 MESSAGE 写对,避免作业莫名取消

SAP后台作业消息处理机制解析 本文深入剖析了SAP系统中后台作业的消息处理机制,揭示了前台与后台执行环境的关键差异。核心发现包括: 后台作业对消息的处理规则: 所有消息写入Job log而不显示 根据消息类型决定是否继续执行 W警告在列表处理阶段会被自动转为E错误 关键异常处理: 通过error_message可捕获E/A类型消息 A类型消息会触发隐式数据库回滚 未被捕获的E/A消息将导致作业中断 实用解决方案: 将业务提示改为S或I类型 使用DISPLAY LIKE保持前台体验 通过error_mess

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2220

修改 Alist 密码时报错?看看这个坑怎么解决!

启动服务后,再修改密码”。以后再遇到类似问题,先检查服务是否正常运行,说不定就能少踩不少坑。如果还有其他 Alist 的问题,欢迎在评论区留言交流~

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1155

SHA-1与SHA-256深度对比:从原理到应用的安全哈希算法选型指南

密码学哈希函数是信息安全领域的核心基础组件,其核心原理是将任意长度的输入数据通过单向散列运算,映射为固定长度的唯一“数字指纹”。这种单向性和抗碰撞性,构成了数据完整性校验、数字签名和身份认证等技术的基石。随着计算能力的演进,哈希算法的安全性也在不断升级,其技术价值直接决定了数字资产和通信过程能否抵御伪造与篡改。在区块链、数字证书、密码存储和软件分发等关键应用场景中,算法选型直接影响系统安全。本文聚焦于SHA-1和SHA-256这两个标志性算法,剖析其设计差异与安全演进。其中,SHA-1因**碰撞攻击**已变

weixin_34342207的博客 439

在MATLAB中将C语言代码转化为可执行的mexw64文件

这样,您可以将高效的C语言算法集成到MATLAB环境中,以便更好地利用MATLAB的功能和特性。请记住,在使用mex转换C语言代码之前,您需要正确编写和测试C语言代码,并确保它与MATLAB的mex接口兼容。MATLAB是一种功能强大的数值计算软件,它提供了一个机制,可以将C语言代码转化为MATLAB可执行的mexw64文件。在上述命令中,"-output"选项指定生成的mex文件的名称,"myfunction"是您选择的名称,"myfunction.c"是要编译的C语言源文件。步骤1:编写C语言代码。

CodeRoarX的博客 1428

我用RTX4090显卡跑了区块链实验

RTX4090凭借强大算力加速区块链实验,支持PoW、智能合约与零知识证明的并行化处理,在TPS、能效和延迟方面显著优于传统CPU架构。

weixin_28840811的博客 1163

2026 企查查/天眼查:IP频率限制 + 验证码策略,企业工商数据采集实战

企业工商数据采集技术解析与解决方案 本文深度剖析了2026年企查查和天眼查平台的反爬机制与技术对抗方案。主要内容包括: 反爬机制分析: 采用JA4+ TLS指纹识别、极验v6验证码等多层防护 IP限制策略严格区分未登录/普通/VIP账号 精准识别并封禁数据中心IP 核心解决方案: 构建高可用住宅代理池,动态轮换真实用户IP 基于YOLOv8的验证码缺口识别技术(准确率99%) 分布式架构设计,支持千万级数据采集 多账号池管理与行为模拟技术 技术亮点: 动态住宅IP池实现1%以下封禁率 Playwright浏

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1328

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

哈希算法工程实践:从缓存设计到分布式分片的7个关键决策

哈希算法是现代软件系统中实现O(1)查找、数据分片与一致性保障的核心基础技术。其本质是在确定性(相同输入恒得相同输出)与雪崩效应(微小输入变化引发均匀随机输出)之间取得精密平衡,从而支撑高并发缓存、数据库索引、短链服务等典型场景。工程落地中,选型不能只看理论强度,而需结合输入分布特征、负载规模与安全等级——如单机HashMap依赖扰动函数应对偏态hashCode,分布式场景倾向Jump Hash替代一致性哈希以降低客户端复杂度,密码存储则必须使用bcrypt等抗暴力破解的密钥派生函数而非通用哈希。本文聚焦真

weixin_34116110的博客 362

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SM3国密哈希算法深度解析:Python与Rust实现对比

哈希算法是现代密码学和数据安全的核心基础,它将任意长度的数据映射为固定长度的唯一“数字指纹”,确保数据的完整性和不可篡改性。其核心原理基于Merkle-Damgård等迭代结构,通过压缩函数和轮函数实现单向性和抗碰撞性。在技术价值上,哈希算法是数字签名、消息认证、区块链等众多安全协议的基石。随着数据安全合规要求日益严格,特别是在金融、政务等关键领域,国密算法(SM系列)的应用成为刚需。SM3作为国密标准哈希算法,与SHA-256目标一致但设计独立,其独特的消息扩展和分段布尔函数设计,为满足特定合规场景提供了

weixin_30709061的博客 441

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

生日攻击:从生日悖论到哈希碰撞的密码学威胁与防御

哈希函数是现代密码学和计算机安全的基础组件,其核心特性之一是抗碰撞性,即难以找到两个不同的输入产生相同的输出值。这一特性直接关系到数字签名、证书认证、区块链等关键系统的安全性。其背后的数学原理与著名的生日悖论紧密相连,该悖论揭示了在随机样本中,随着样本量增长,碰撞概率会以远超直觉的速度快速上升。基于此原理的生日攻击,通过利用组合爆炸效应,将寻找特定碰撞的复杂度从指数级降至平方根级,从而对采用短输出哈希算法的系统构成严重威胁。在实际工程中,开发者必须理解这种攻击模型,并采取选用SHA-256等长哈希算法、为哈

weixin_30740295的博客 393

哈希算法本质是地址簿生成器:从HashMap到分布式路由的工程实践

哈希算法是计算机系统中最基础的数据映射机制,其核心原理在于将任意输入确定性地映射为固定范围的整数索引,实现O(1)级查找。它不等于加密,而是支撑HashMap、Redis哈希结构、缓存路由、分库分表、布隆过滤器等关键技术的底层逻辑。关键特性包括确定性、均匀分布性与雪崩效应,直接决定哈希冲突率、内存利用率和查询性能。在工程实践中,哈希函数选型(如Murmur3)、桶数量设计(质数或2的幂+扰动)、负载因子调控、线程安全处理及跨节点一致性(如虚拟节点一致性哈希)共同构成稳定系统的基石。本文聚焦开发者每日编码中真

weixin_34183910的博客 432
上一篇: 分享实录|一文读懂区块链整体架构及应用方向
下一篇: 区块链100讲:公开密钥算法不能不知道的4个概念
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值