【极海APM32F407 Tiny Board】5. SHA1算法测试
[复制链接]
SHA1算法是Hash算法的一种。SHA1算法的最大输入长度小于2^64比特的消息,输入消息(明文)以512比特的分组为单位处理,输出160比特的消息摘要(密文)
整个算法的核心是一个包含4轮循环的模块,每轮循环由20个步骤组成。
SHA1对任意长度明文的预处理和MD5的过程是一样的,即预处理完后的明文长度是512位的整数倍,但是有一点不同,那就是SHA1的原始报文长度不能超过2的64次方,然后SHA1生成160位的报文摘要。SHA1算法简单而且紧凑,容易在计算机上实现。
下表列出了对MD5及SHA1的比较差异之处。让我们根据各项特性,简要说明其间的不同。
差异处
|
MD5
|
SHA1
|
摘要长度
|
128位
|
160位
|
运算步骤数
|
64
|
80
|
基本逻辑函数数目
|
4
|
4
|
常数数目
|
64
|
4
|
● 安全性:SHA1所产生的摘要比MD5长32位。若两种散列函数在结构上没有任何问题的话,SHA1比MD5更安全。
● 速度:两种方法都是主要考虑以32位处理器为基础的系统结构。但SHA1的运算步骤比MD5多了16步,而且SHA1记录单元的长度比MD5多了32位。因此若是以硬件来实现SHA1,其速度大约比MD5慢了25%。
● 简易性:两种方法都是相当的简单,在实现上不需要很复杂的程序或是大量存储空间。然而总体上来讲,SHA1对每一步骤的操作描述比MD5简单。
步骤如下:1.打开SHA时钟即可初始化。
RCM_EnableAHB2PeriphClock(RCM_AHB2_PERIPH_HASH);
2. 调用库函数接口计算SHA1:
/* SHA-1 Digest Computation */
printf("Hello,Geehy!!!\r\n");
for (int i=0; i<261; i++)
{
printf("%02X ", input[i]);
}
printf("\r\n");
printf("SHA-1 Digest Computation Begin\n\r");
HASH_ComputeSHA1((uint8_t*)input, 261, sha1output);
/** Digest Display */
printf("SHA-1 Digest Computation Done:\r\n");
for (int i=0; i<20; i++)
{
printf("%02X ", sha1output[i]);
}
3.查看结果,并用第三方工具对比:
总结:得益于Geehy优秀的加密协处理器,计算sha1 达到了惊人的高速率,能节省cpu的时间,比软件库实现的SHA1 算法更优!
|