C++实现shal哈希填充算法
时间: 2023-07-09 12:53:34 浏览: 159
以下是C++实现SHA1哈希算法的填充算法:
```c++
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
const unsigned int SHA1_BLOCK_SIZE = 64;
unsigned int leftrotate(unsigned int x, unsigned int n) {
return (x << n) | (x >> (32 - n));
}
void sha1_pad_message(unsigned char* message, unsigned int message_len, unsigned char* padded_message, unsigned int& padded_message_len) {
// 计算填充后的消息长度
unsigned int bit_len = message_len * 8;
unsigned int zero_len = SHA1_BLOCK_SIZE - ((message_len + 9) % SHA1_BLOCK_SIZE);
padded_message_len = message_len + zero_len + 9;
// 填充消息
memcpy(padded_message, message, message_len);
padded_message[message_len] = 0x80;
memset(padded_message + message_len + 1, 0, zero_len);
padded_message[padded_message_len - 8] = (bit_len >> 56) & 0xFF;
padded_message[padded_message_len - 7] = (bit_len >> 48) & 0xFF;
padded_message[padded_message_len - 6] = (bit_len >> 40) & 0xFF;
padded_message[padded_message_len - 5] = (bit_len >> 32) & 0xFF;
padded_message[padded_message_len - 4] = (bit_len >> 24) & 0xFF;
padded_message[padded_message_len - 3] = (bit_len >> 16) & 0xFF;
padded_message[padded_message_len - 2] = (bit_len >> 8) & 0xFF;
padded_message[padded_message_len - 1] = bit_len & 0xFF;
}
```
该函数接收三个参数:
- `message`:需要哈希的消息。
- `message_len`:消息的长度。
- `padded_message`:填充后的消息,用于进行哈希计算。
- `padded_message_len`:填充后的消息的长度。
在函数中,首先计算填充后的消息长度,然后使用`memcpy`将原始消息复制到填充后的消息中。接着,在填充后的消息的末尾添加一个`1`和若干个`0`,直到消息的长度满足512的整数倍。最后,添加一个64位的整数,用于记录消息的原始长度。函数执行完毕后,`padded_message`指向填充后的消息,`padded_message_len`记录了填充后的消息的长度。
注意,该函数并没有对输入参数进行检查,请确保输入参数的合法性。
阅读全文