安全哈希算法(Secure Hash Algorithm)SHA1主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital SignatureAlgorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。 SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)。

一.SHA1与MD5差异

SHA1对任意长度明文的预处理和MD5的过程是一样的,即预处理完后的明文长度是512位的整数倍,但是有一点不同,那就是SHA1的原始报文长度不能超过2的64次方,然后SHA1生成160位的报文摘要。SHA1算法简单而且紧凑,容易在计算机上实现。

下面列出了对MD5及SHA1的比较差异之处。让我们根据各项特性,简要说明其间的不同。

MD5与SHA1的比较

差异处    摘要长度       运算步骤数    基本逻辑函数数目       常数数目

MD5     128位                   64                         4                          64

SHA1    160位                   80                         4                          4

SHA1优点

● 安全性:SHA1所产生的摘要比MD5长32位。若两种散列函数在结构上没有任何问题的话,SHA1比MD5更安全。

● 速度:两种方法都是主要考虑以32位处理器为基础的系统结构。但SHA1的运算步骤比MD5多了16步,而且SHA1记录单元的长度比MD5多了32位。因此若是以硬件来实现SHA1,其速度大约比MD5慢了25%。

● 简易性:两种方法都是相当的简单,在实现上不需要很复杂的程序或是大量存储空间。然而总体上来讲,SHA1对每一步骤的操作描述比MD5简单。

二.SHA1哈希算法流程

对于任意长度的明文,SHA1首先对其进行分组,使得每一组的长度为512位,然后对这些明文分组反复重复处理。

对于每个明文分组的摘要生成过程如下:

(1)将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。

(2)申请5个32位的链接变量,记为A、B、C、D、E。

(3)16份子明文分组扩展为80份。

(4)80份子明文分组进行4轮运算。

(5)链接变量与初始链接变量进行求和运算。

(6)链接变量作为下一个明文分组的输入重复进行以上操作。

(7)最后,5个链接变量里面的数据就是SHA1摘要。

三.SHA1的分组过程

对于任意长度的明文,SHA1的明文分组过程与MD5相类似,首先需要对明文添加位数,使明文总长度为448(mod512)位。在明文后添加位的方法是第一个添加位是l,其余都是0。然后将真正明文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文后,此时的明文长度正好是512位的倍数。与MD5不同的是SHA1的原始报文长度不能超过2的64次方,另外SHA1的明文长度从低位开始填充。

经过添加位数处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组(block),可以划分成L份明文分组,我们用Y0,Y1,……YL-1表示这些明文分组。对于每一个明文分组,都要重复反复的处理,这些与MD5是相同的。

对于512位的明文分组,SHA1将其再分成16份子明文分组(sub-block),每份子明文分组为32位,我们使用M[k](k= 0, 1,……15)来表示这16份子明文分组。之后还要将这16份子明文分组扩充到80份子明文分组,我们记为W[k](k= 0, 1,……79),扩充的方法如下。

Wt = M t , 当0≤t≤15

Wt = ( W t-3 ⊕ W t-8⊕ W t-14⊕ W t-16 ) <<< 1, 当16≤t≤79

SHA1有4轮运算,每一轮包括20个步骤(一共80步),最后产生160位摘要,这160位摘要存放在5个32位的链接变量中,分别标记为A、B、C、D、E。这5个链接变量的初始值以16进制位表示如下。

A=0x67452301

B=0xEFCDAB89

C=0x98BADCFE

D=0x10325476

E=0xC3D2E1F0

四.SHA1的4轮运算

SHA1有4轮运算,每一轮包括20个步骤,一共80步,当第1轮运算中的第1步骤开始处理时,A、B、C、D、E五个链接变量中的值先赋值到另外5个记录单元A′,B′,C′,D′,E′中。这5个值将保留,用于在第4轮的最后一个步骤完成之后与链接变量A,B,C,D,E进行求和操作。

SHA1的4轮运算,共80个步骤使用同一个操作程序,如下:

A,B,C,D,E←[(A<<<5)+ft(B,D,C)+E+Wt+Kt],A,(B<<<30),C,D

其中ft(B,D,C)为逻辑函数,Wt为子明文分组W[t],Kt为固定常数。这个操作程序的意义为:

● 将[(A<<<5)+ft(B,D,C)+E+Wt+Kt]的结果赋值给链接变量A;

● 将链接变量A初始值赋值给链接变量B;

● 将链接变量B初始值循环左移30位赋值给链接变量C;

● 将链接变量C初始值赋值给链接变量D;

● 将链接变量D初始值赋值给链接变量E。

SHA1的4轮逻辑函数

轮1

步骤0≤t≤19

函数定义ft(B,C,D)=(B·C)V(~B·D)

轮2

步骤20≤t≤39

函数定义ft(B,C,D)=B⊕C⊕D

轮3

步骤40≤t≤59

函数定义ft(B,C,D)=(B·C)V(B·D)V(C·D)

轮4

步骤60≤t≤79

函数定义ft(B,C,D)=B⊕C⊕D

在操作程序中需要使用固定常数Ki(i= 0,1,2,……79),Ki的取值。

四轮运算

轮1

步骤0≤t≤19

函数定义Kt=5A827999

轮2

步骤20≤t≤39

函数定义Kt=6ED9EBA1

轮3

步骤40≤t≤59

函数定义Kt=8F188CDC

轮 4

步骤60≤t≤79

函数定义Kt=CA62C1D6

我们同样举一个例子来说明SHA1哈希算法中的每一步是怎样进行的,比起MD5算法,SHA1相对简单,假设W[1]=0x12345678,此时链接变量的值分别为A=0x67452301、B=0xEFCDAB89、C=0x98BADCFE、D=0x10325476、E=0xC3D2E1F0,那么第1轮第1步的运算过程如下。

(1)将链接变量A循环左移5位,得到的结果为:0xE8A4602C。

(2)将B,C,D经过相应的逻辑函数:

(3)将第(1)步,第(2)步的结果与E,W[1],和K[1]相加得:

(4)将B循环左移30位得:(B<<<30)=0x7BF36AE2。

(5)将第3步结果赋值给A,A(这里是指A的原始值)赋值给B,步骤4的结果赋值给C,C的原始值赋值给D,D的原始值赋值给E。

(6)最后得到第1轮第1步的结果:

A= 0xB1E8EF2B

B= 0x67452301

C= 0x7BF36AE2

D= 0x98BADCFE

E= 0x10325476

按照这种方法,将80个步骤进行完毕。

第四轮最后一个步骤的A,B,C,D,E输出,将分别与记录单元A′,B′,C′,D′,E′中的数值求和。

安全哈希算法SHA1相关推荐

  1. 哈希算法SHA1,SHA256,SHA384,SHA512

    HASH算法,sha系列的基本写完 sha1 ,见我之前的一篇博客 http://andydhu.blog.51cto.com/3337368/824735 sha256 #include<st ...

  2. sha算法 哈希算法_SHA1哈希算法教程及其用法示例

    sha算法 哈希算法 SHA1 is a hash algorithm that is created by the National Security Agency (NSA). SHA1 hash ...

  3. 区块链幸运哈希游戏哈希算法共享

    什么是哈希算发: 哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值.哈希值是一段数据唯一且极其紧凑的数值表示形式.如果散列一段明文而且哪怕只更改该段落的一个字母, ...

  4. 彻底掌握哈希算法,不再似懂非懂!

    一.介绍及原理 1.1 简介 哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要.比如Java字符串的hashCode()就是哈希算法 ...

  5. Java加密:常见哈希算法总结

    目录 一.概述 二.哈希碰撞 三.常见的哈希算法 四.简单应用代码实现 下面先以MD5算法对密码进行加密为例: 哈希算法的用途 扩展: 一.概述 哈希算法(Hash)又称摘要算法(Digest ),它 ...

  6. 实现 JavaScript 哈希算法 包含 md5, sha1 sha256

    在解ob混淆时 发现其中作者实现的几种哈希算法,觉得写的不错,遂拿来分享给大家 MD5算法 function hash_md5(_0x5be8e2) {function _0x3cf213(_0x5c ...

  7. 哈希算法、HD5、SHA-1

    哈希函数 哈希函数(Hash Function),也称为散列函数或杂凑函数. 哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值.散列值.杂凑 ...

  8. 五分钟带你了解哈希算法

    导读: 当新人在学区块链技术的时候,都会听到哈希和哈希算法,这似乎是无处不在的安全性保证.例如比特币或者以太坊这种运行去中心化网络和共识的机器,都会有上万个节点通过P2P连接,并且需要"无需 ...

  9. 识别哈希算法类型hash-identifier

    识别哈希算法类型hash-identifier hash-identifier是一款哈希算法识别工具.通过该工具,用户可以识别哈希值所使用的哈希算法.确定算法后,就可以采用对应的工具进行xx.执行该命 ...

  10. 散列算法 SHA-1,SHA-2和SHA-256之间的区别

    随着SSL证书的普及,以"SHA"开头的算法的知名度也越多越高,但并不是很多人能够完全能分清"SHA"所有的算法,本文将会围绕"SHA"展开 ...

最新文章

  1. 【Java挠头】可变参、foreach、Annotation等特性
  2. 传统IP网络与MPLS网络转发的区别
  3. 参数匹配模型——Python学习之参数(二)
  4. win10安装tensorflow (cpu版)
  5. 关于linux防火墙
  6. mda.helper.php,dedecms后台更新缓慢甚至卡死怎么办
  7. 神经网络与深度学习——TensorFlow2.0实战(笔记)(三)(python输入和输出)
  8. 21岁MIT本科生推动数学重要问题新进展,曾获阿里数学竞赛奖
  9. python4发布_Python 3.4.1 发布
  10. requirejs加载顺序_前端模块化之AMD — Requirejs的使用
  11. nacos 本地测试_本地调试和服务器调试都无法连通-问答-阿里云开发者社区-阿里云...
  12. 什么是股票量化交易策略?
  13. WebGoat教程解析——Hijack a Session
  14. 小马激活工具激活系统导致系统崩溃
  15. 图片识别转公式,GitHub 又一 LaTeX 神器面世!
  16. 05 - 钓鱼网站的攻击与防御
  17. 『TopCoder 组件开发指南』
  18. 金乡计算机老师培训,致敬!金乡优秀教师公布,有教过你的老师吗?
  19. Kafka源码阅读-Controller(二)管理brokers
  20. fetion发送短信介绍(比如天气预报)

热门文章

  1. WinForm中使用DXperience控件中XtraForm,如何实现换肤
  2. QT 基于饼状图的一个抽奖系统
  3. PSP 版本6.60 破解 PRO-B10自制系统升级图文教程
  4. 《数字图像处理》--冈萨雷斯(第十章)
  5. cplex入门系列(二)--- 线性规划求解
  6. 硅谷女孩火了,更该让他们开始学编程
  7. 上位机与西门子PLC通信协议
  8. c语言中药品管理系统报告,C语言 药品管理系统.doc
  9. idea使用数据库连接工具
  10. 通信系统是如何收发复数信号的:IQ 调制原理