跟着小生学逆向之SHA系列算法
最近小生在研究微信支付接口,发现它们不仅支持MD5摘要验证还支持SHA-256,很多同学就会问了SHA是什么?其实SHA也是一种算法有很多版本,而今天小生也给大家来介绍介绍这个SHA算法,希望同学们可以学到更多想学的逆向知识!
目录
1、SHA算法简单概要
2、SHA系列算法介绍
3、在eclipse中分析SHA代码
SHA算法简单概要
SHA全称:(security Hash Algorithm),是美国的nist和nsa设计的一种标准的Hash算法,SHA用于数字签名和标准算法的DSS中,也是安全性很高的一种Hash算法。
SHA系列算法介绍
1)SHA-1
SHA-1算法的输入消息长度小于264bit,最终输出的结果值是160Bits
SHA-1与MD4相比较而言主要是增加了扩展变换,将前一轮的输出也加到了下一轮,这样增加了雪崩效应,并且由于其160bits的输出,对穷举攻击更具有抵抗性,那么大致实现过程,就是将消息摘要算法转换成位字符,对转换后的位字符进行补位操作。
我们先来看一下它的大致实现过程,将消息摘要转换成位字符,对转换后的位字符串进行补位操作,附加长度值并且初始化缓存,然后计算消息摘要。
2)SHA-256算法
SHA-256算法输入报文的最大长度不超过264Bits,输入按512Bits分组进行处理,产生的输出是应该256Bits的报文摘要。
我们来看一下算法处理步骤。
首先我们会添加填充位,对报文进行填充使用使报文长度与448模512同余,填充的比特数范围是1-512,填充比特串的最高位1,其余位为0,就是先在报文后面加一个1,再多加一个0,直到长度满足mod512=448。
这里为什么是448呢?因为448+64=512第二步会加上一个长度64位的原始报文长度
第二步附加长度值,将用64位表示的初始报文,这个是在填充前的一个位长度附加在步骤1的结果后,此时是低位字节优先。
第三步初始化缓存,使用一个256位的缓存来存放该散列函数的中间及最终结果,它可以表示为8个32位的寄存器。
ABCDEFGH
第四步处理512报文分组序列,该算法使用了6种基本逻辑函数,由64步迭代运算组成,每步都以256位缓存值ABDCEFGH为输入,然后更新缓存内容,每步使用一个32位常数值Kt和一个32位Wt。
第五步结果输出,所有的512为分组处理完毕后对于SHA-256算法最后一个分组产生的输出便是256位的报文摘要,这里需要说一点,具体实现设计到一些数字知识。所有具体细节同学们可留言给我,我给大家说,我们只需要目标过程就行。
3)SHA-2的其他衍生算法
包括SHA-224、SHA-256、SHA-384、SHA-512.
在eclipse中分析SHA代码
这里我们已经准备好了,直接到咱们的eclipse中分析代码即可。
我们先来看一下他的一个主类mainactivity,在这里它是一个自定义的SHA算法,要把加密的数据传进去,然后使用自定义bytearr2hexstr方法进行遍历拼接,也就在这里进行自定义的一个方法。
首先这个是使用getinstance方法获取不同的一个算法
每个算法的大致实现是一样的小结:
其实每个算法都差不多是一样的,只是要看你具体用到那个,不过这个算是比较简单的算法了,希望能够帮到大家。,唯一不同的就是使用getinstance获取到的算法不一样。