SHA-512

1.简介

SHA-512算法所使用的消息长度为 2 128 2^{128} 2128,生成一个大小为512位的消息摘要。其输出分成多个块,每个块的大小为1024位。SHA-512是严格按照SHA-1模型来的,而SHA-1又是按照MD5来的。

2.工作原理

2.1 填充
与MD5和SHA-1一样,SHA-512的第一步也是在初始消息中增加填充位,目的使初始消息长度等于一个值,即比1024的倍数少128位。注意,与MD5和SHA-1一样,填充总是要进行的,即使消息长度已经是1024的倍数少128位。
2.2 添加长度
计算不包括填充位的消息长度,并把它作为一个128位的块附加到填充位的后面,这样消息的长度正好是128的倍数。
2.3 将输入分成1024位的块
将输入消息分成多个块,每个块长度为512位。这些块就是消息摘要处理逻辑的输入。
2.4初始化链接变量
现在要初始化从A~ H的8个链接变量。在SHA-512中,要生成一个长度为512位的消息摘要,因此需要8个链接变量,每个含有64位。在SHA-512中,这8个链接变量的值如下表所示:

A=6A09E667F3BCC908B=BB67AE8584CAA73B
C=3C6FE373FE94F82BD=A54FF53A5F1D36F1
E=510E527FADE682D1F=9B05688C2B3E6C1F
G=1F83D9ABFB41BD6BH=5BE0CD19137E2179

2.5处理块
这里的步骤和MD5和SHA-1的非常类似。
第一步:将链接变量A~ H复制到变量a~ h中,a~ h(称为abcdefgh)看作是单个寄存器,用于存储临时的中间结果和最终结果。
第二步:将当前的1024位块分解成16子块,每个子块64字。
第三步:SHA-512有80轮,每轮以当前的1024位块、寄存器abcdefgh和常量K[t](其中t=0~ 79)作为它的三个输入。然后用SHA-512算法步骤更新寄存器abcdrfgh的内容,每轮的操作如下图所示:
在这里插入图片描述
每轮包含以下操作:
Temp1=h+Ch(e,f,g)+Sum(ei for i=1 to 512)+Wt+Kt
Temp2=Sum(ai for i=0 to 512)+Maj(a,b,c)
a=Temp1+Temp2
b=a
c=b
d=c
e=d+Temp1
f=e
g=f
h=g
其中:
t=轮次号
Ch(e,f,g)=(e AND f) XOR (NOT e AND g)
Maj(a,b,c)=(a AND b) XOR (a AND c) XOR (b AND c)
Sum(ai)=ROTR(ai × \times × 28位) XOR ROTR(ai × \times × 34位) XOR ROTR(ai × \times × 39位)
Sum(ei)=ROTR(ei × \times × 14位) XOR ROTR(ei × \times × 18位) XOR ROTR(ei × \times × 41位)
ROTR(x)=循环右移,即,把64位数组移动指定数目的位
Wt=从当前512位输入块得出的64位词
Kt=63位添加常量
+(或AND)=相加结果mod  2 64 2^{64} 264
需要注意Wt的以下几点:
(1)对于前16轮(即0~ 15轮),Wt的值等于消息块的相应词。
(2)对于其余的64轮,Wt的值等于把前4个Wt的值与要进行移位和旋转操作的其中两个XOR操作后循环左移1位的结果。
这样就使得消息摘要更复杂,更难破解。

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
SHA-512是一种哈希算法,它是SHA-2系列中的一员,用于生成具有512位输出长度的哈希值。在MATLAB中使用SHA-512算法,可以使用第一个引用中提到的参考链接。该链接提供了一个关于如何在MATLAB中使用SHA-512算法的讨论。可以通过该链接了解如何使用MATLAB中的内置函数或者外部库来实现SHA-512算法。 此外,还可以使用其他编程语言或工具来实现SHA-512算法。例如,可以使用C/C++语言编写的库homest来进行SHA-512哈希计算。homest是一个用于估计单应性的C/C++库,但它也提供了SHA-512哈希算法的实现。通过调用homest库中的相应函数,可以在MATLAB中使用SHA-512算法。 总结起来,要在MATLAB中使用SHA-512算法,可以使用内置函数或外部库来实现。具体的实现方式可以参考第一个引用提供的参考链接或者使用homest库中的相关函数来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MATLAB实现SHA-512/SHA-256等加密算法以及生成随机的0/1二进制码流](https://blog.csdn.net/Harbour_zhang/article/details/103084622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C++开源库集合](https://blog.csdn.net/Toobad321/article/details/77887304)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhInen丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值