一:SHA算法简单概要
SHA (Security Hash Algorithm) 是美国的 NIST 和 NSA 设计的一种标准的 Hash 算法,SHA 用于数字签名的标准算法的 DSS 中,也是安全性很高的一种 Hash 算法。
二:SHA系列算法介绍
1)SHA-1
SHA-1 算法的输入消息长度小于 264bit,最终输出的结果值是 160 Bits,SHA-1 与 MD4 相比较而言,主要增加了扩展变换,将前一轮的输出也加到了下一轮,这样增加了雪崩效应,而且由于其 160 Bits 的输出,对穷举攻击更具有抵抗性。
大致实现过程:将消息摘要转换成位字符串,对转换后的位字符串进行补位操作,附加长度值并且初始化缓存,然后计算消息摘要。
2)SHA-256 算法
SHA-256 算法输入报文的最大长度不超过 264 Bits,输入按 512 Bits 分组进行处理,产生的输出是一个 256 Bits 的报文摘要。
算法处理步骤:
1、附加填充位
对报文进行填充使报文长度与 448 模 512 同余(长度 = 448 mod 512), 填充的比特数范围是 1 到 512,填充比特串的最高位为 1,其余位为 0。 就是先在报文后面加一个 1,再加很多个 0,直到长度满足 mod 512=448。为什么是 448?因为 448+64=512。第二步会加上一个 64 位的原始报文的长度信息。
2、附加长度值
将用 64 位表示的初始报文(填充前)的位长度附加在步骤 1 的结果后(低位字节优先)。
- 初始化缓存
使用一个 256 位的缓存来存放该散列函数的中间及最终结果。它可以表示为 8 个 32 位的寄存器(A, B, C, D, E, F, G, H)
4.处理 512 位报文分组序列
该算法使用了六种基本逻辑函数,由 64 步迭代运算组成。每步都以 256 位缓存值 ABCDEFGH 为输入,然后更新缓存内容。每步使用一个 32 位常数值 Kt 和一个 32 位 Wt。
- 结果输出
所有的 512 位分组处理完毕后,对于 SHA-256 算法最后一个分组产生的输出便是 256 位的报文摘要。
补充:(这里的具体实现设计到一些数学知识,顾具体细节不做讨论,同学们只需要明白大致过程即可)
3)SHA-2的其他衍生算法
包括SHA-224、SHA-256、SHA-384、SHA-512,这些版本共同构成了SHA大家庭。
SHA-224:SHA-256的“阉割版”,可以生成长度224bit的信息摘要。
SHA-512:可以生成长度512bit的信息摘要。
SHA-384:SHA-512的“阉割版”,可以生成长度384bit的信息摘要。
SHA家族的最新成员SHA-3已经于2015年问世。关于SHA-3的细节,有兴趣的小伙伴们可以查询资料进一步学习。
三:在Eclipse中分析SHA代码并且演示效果
1)主类MainActivity
通过调用自定义的SHA算法把要加密的数据传进去,然后使用自定 义的byteArr2HexStr方法进行遍历拼接;
2)SHA类
使用getInstance方法获取不同的算法,每隔算法的大致实现都是一样的,唯一不同的就是使用getInstance获取到的算法不一样;
代码都一样,唯一的区别是使用getInstnce获取到的算法不一样;
小结:
1、介绍SHA系列相关的算法以及实现原理。
2、分析SHA算法代码以及演示运行效果。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!