C++sha1哈希的填充算法
时间: 2023-07-09 14:55:29 浏览: 89
SHA1哈希算法的填充算法是这样的:
1. 首先,将需要哈希的消息进行补位,使其长度为512的整数倍。
2. 在消息末尾添加一个“1”,再添加若干个“0”,直到消息长度满足上一步的要求。
3. 在消息末尾添加一个64位的整数,用于记录消息的原始长度。
4. 将消息按照512位(即64字节)分组,并进行处理。
5. 对于每一组,先将其分成16个32位的字,然后进行扩展。
6. 扩展后的消息总共有80个字,分别用W[0]~W[79]表示。
7. 对于每一组,使用以下公式进行计算:
a = h0;
b = h1;
c = h2;
d = h3;
e = h4;
for(int i = 0; i < 80; i++) {
if(i >= 16) {
W[i] = leftrotate(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);
}
if(i < 20) {
f = (b & c) | ((~b) & d);
k = 0x5A827999;
} else if(i < 40) {
f = b ^ c ^ d;
k = 0x6ED9EBA1;
} else if(i < 60) {
f = (b & c) | (b & d) | (c & d);
k = 0x8F1BBCDC;
} else {
f = b ^ c ^ d;
k = 0xCA62C1D6;
}
temp = leftrotate(a, 5) + f + e + k + W[i];
e = d;
d = c;
c = leftrotate(b, 30);
b = a;
a = temp;
}
h0 += a;
h1 += b;
h2 += c;
h3 += d;
h4 += e;
8. 最终的哈希值为h0、h1、h2、h3、h4组成的五个32位整数,按照大端字节序排列。
阅读全文