SHA1算法

什么是SHA1算法(Secure Hash Algorithm)

SHA1算法也是一种哈希算法,也称单向散列算法,不可逆,适用于数字签名标准。与MD5大同小异。

算法流程

(1)明文处理,对明文进行填充,使其满足模512余448,填充方式与MD5相同,然后补64位的明文数据长度,这里用的是大端字节序。
(2)分组,将512位的明文以32位为一组划分为16组。
(3)初始化变量,这里用到五个变量A、B、C、D、E。
(4)分组后的明文数据有16组,将其拓展为80组,共320字节,大端字节序。
(5)80组明文数据进行4轮运算,一轮20个步骤,共80次。
(6)运算结束后,将计算的结果与初始化时的变量值相加。
(7)如果只有一个512位,就不需要继续计算,如果不止1个512位,那么上一步骤中相加后的结果作为个80轮循环中的五个变量值继续进行计算。
(8)最后,五个变量值的拼接后的数据就是其SHA1值。

算法实现

明文处理和分组与MD5相同,这里不再解释。

初始化变量

与MD5不同的是,SHA1使用了5个变量
A=0x67452301,
B=0xEFCDAB89,
C=0x98BADCFE,
D=0x10325476,
E=0xC3D2E1F0

16组明文数据扩展为80组

首先把原来的明文数据用M来表示,记为M[t] (t=0,1,…15)。
而扩展后的明文数据用W来表示,记为W[t] (t=0,1,…,79)。
在这里插入图片描述
扩展的方式就是前16组数据不变,从第17组到80组按照图中公式计算所得,(Wt-3)+(Wt-8)+(Wt-14)+(Wt-16),其结果左移1位得到的。

4轮运算

每轮20个步骤,这些步骤可以用一个公式来表示
A=(A<<5)+ft(B,C,D)+E+Wt+Kt,其结果赋值给了A,
将A变量值赋值给变量B,
将B变量值循环左移30位赋值给变量C,
将C变量值赋值给变量D,
将D变量值赋值给变量E。

f 函数表

在这里插入图片描述

计算后的结果与初始变量值相加便是最终的结果。

相关推荐

  1. Android Apk签名算法使用SHA256

    2024-07-09 17:12:10       32 阅读
  2. MongoDB SASL 鉴权方式 SCRAM-SHA-1步骤

    2024-07-09 17:12:10       42 阅读
  3. Android 获取sha1的快速有效的简单方法

    2024-07-09 17:12:10       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 17:12:10       51 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 17:12:10       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 17:12:10       44 阅读
  4. Python语言-面向对象

    2024-07-09 17:12:10       55 阅读

热门阅读

  1. Docker

    Docker

    2024-07-09 17:12:10      21 阅读
  2. C++多线程学习笔记

    2024-07-09 17:12:10       24 阅读
  3. 实现基于Spring Cloud的事件驱动微服务

    2024-07-09 17:12:10       23 阅读
  4. js使用websocket,vue使用websocket,copy即用

    2024-07-09 17:12:10       22 阅读
  5. PostgreSQL的扩展(extensions)-常用的扩展-pg_profile

    2024-07-09 17:12:10       26 阅读
  6. Spring Boot整合MongoDB实现事务管理

    2024-07-09 17:12:10       23 阅读