首页
社区
课程
招聘
[原创]常见加密算法——SHA系列算法
2020-11-20 17:28 10818

[原创]常见加密算法——SHA系列算法

2020-11-20 17:28
10818

一: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 的结果后(低位字节优先)。

  1. 初始化缓存

使用一个 256 位的缓存来存放该散列函数的中间及最终结果。它可以表示为 8 个 32 位的寄存器(A, B, C, D, E, F, G, H)

 

4.处理 512 位报文分组序列

 

该算法使用了六种基本逻辑函数,由 64 步迭代运算组成。每步都以 256 位缓存值 ABCDEFGH 为输入,然后更新缓存内容。每步使用一个 32 位常数值 Kt 和一个 32 位 Wt。

  1. 结果输出

所有的 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算法代码以及演示运行效果。


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (12)
雪    币: 7557
活跃值: (3224)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
arab 2020-11-21 01:10
2
0
Hash 算法不是加密算法,先把概念理清楚。
雪    币: 1996
活跃值: (3900)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
上火喝王老吉 2020-11-23 10:10
3
0
arab Hash 算法不是加密算法,先把概念理清楚。
从严格意义来讲,哈希只能是加密算法的一个构成部分。
雪    币: 7557
活跃值: (3224)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
arab 2020-11-23 11:19
4
0
没有哈希照样可以加密,古代的哪个加密算法用到了哈希? 即使到了现代,DES,RSA,AES哪一个用到了哈希?或者你举出一个用哈希加密的算法出来?
自己概念没搞清楚就不要强词夺理了,这里不是小白论坛。
雪    币: 9616
活跃值: (1826)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
Sprite雪碧 1 2020-11-24 00:04
5
0
上火喝王老吉 从严格意义来讲,哈希只能是加密算法的一个构成部分。
确实一些哈希叫做“密码安全哈希”(cryptographically secure hash),但是和你标题中的“常见加密算法——SHA系列算法”表达意义完全不同,容易误导新人
雪    币: 9616
活跃值: (1826)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
Sprite雪碧 1 2020-11-24 00:14
6
0
arab 没有哈希照样可以加密,古代的哪个加密算法用到了哈希? 即使到了现代,DES,RSA,AES哪一个用到了哈希?或者你举出一个用哈希加密的算法出来? 自己概念没搞清楚就不要强词夺理了,这里不是小白论坛。

据我所知,所有含有消息认证的加密算法都使用了哈希,其中就包括 AES 和 RSA

最后于 2020-11-24 00:15 被Sprite雪碧编辑 ,原因:
雪    币: 7557
活跃值: (3224)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
arab 2020-11-24 01:08
7
0
Sprite雪碧 arab 没有哈希照样可以加密,古代的哪个加密算法用到了哈希? 即使到了现代,DES,RSA,AES哪一个用到了哈希?或者你举出一个用哈希加密的算法出来? 自己 ...
“含有消息认证的加密算法”是什么鬼?加密算法就是加密算法,消息认证就是消息认证,两个完全不同的东西扯到一起?你也被楼主误导了?RSA哪里用到哈希了?AES---特指Rijndael加密算法---哪里用到哈希了?你是不是对“加密算法”有什么误解?
雪    币: 9616
活跃值: (1826)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
Sprite雪碧 1 2020-11-24 05:18
8
1
arab “含有消息认证的加密算法”是什么鬼?加密算法就是加密算法,消息认证就是消息认证,两个完全不同的东西扯到一起?你也被楼主误导了?RSA哪里用到哈希了?AES---特指Rijndael加密算法---哪里用 ...

参考 AES 的 CCM、OCB 和 GCM 模式,或者你也可以说这些模式和 AES 无关

最后于 2020-11-24 05:27 被Sprite雪碧编辑 ,原因:
雪    币: 7557
活跃值: (3224)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
arab 2020-11-24 11:23
9
0
Sprite雪碧 arab “含有消息认证的加密算法”是什么鬼?加密算法就是加密算法,消息认证就是消息认证,两个完全不同的东西扯到一起?你也被楼主误导了?RSA哪里用到哈希了?AE ...
如果我们对“加密算法”的概念的理解是一样的话,答案很明显,这些模式与AES无关。
没有CCM,OCB,GCM,AES还是AES。
没有AES,CCM,OCB,GCM同样可以用在其它的块加密比如DES,TEA,BlowFish上。
两者没有任何从属或依赖关系。
雪    币: 7557
活跃值: (3224)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
arab 2020-11-24 11:27
10
0

这里正好有个 例子 ,你理解的“(TEA)加密算法”是指整个函数呢,还是单指124行以后那部分?

最后于 2020-11-24 11:34 被arab编辑 ,原因:
雪    币: 4752
活跃值: (2923)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
LeadroyaL 1 2020-11-24 14:02
11
0
虽然楼主写的挺好的,但哈希和加密真的是两回事。
雪    币: 2674
活跃值: (2304)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
低调putchar 1 2020-11-27 23:24
12
0
摘要算法!位数越多,发生碰撞的概率越低,不过速度也越慢。
雪    币: 10845
活跃值: (1049)
能力值: (RANK:190 )
在线值:
发帖
回帖
粉丝
看场雪 3 2020-12-23 12:01
13
0
加密算法,通常都是需要有解密算法相对应的。
但(安全)hash算法是不可逆的,要求抗强、弱碰撞。
所以严格意义上讲,hash不能算加密算法,可以算密码算法。
游客
登录 | 注册 方可回帖
返回