C++用哈希加密给文件加密
时间: 2023-12-22 14:04:06 浏览: 110
C++给文件加密的函数
对于使用哈希函数来加密文件,通常哈希函数是用来生成文件的摘要,而不是直接加密文件内容。下面是一个使用C++实现的示例代码,演示了如何使用哈希函数来生成文件的摘要:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <openssl/sha.h>
std::string getFileHash(const std::string& filePath) {
std::ifstream file(filePath, std::ios::binary);
if (!file) {
std::cerr << "Failed to open file: " << filePath << std::endl;
return "";
}
// 计算文件的哈希值
SHA_CTX shaContext;
SHA1_Init(&shaContext);
const int bufferSize = 8192;
char buffer[bufferSize];
while (file.read(buffer, bufferSize)) {
SHA1_Update(&shaContext, buffer, bufferSize);
}
// 处理剩余的字节
SHA1_Update(&shaContext, buffer, file.gcount());
// 获取哈希结果
unsigned char hash[SHA_DIGEST_LENGTH];
SHA1_Final(hash, &shaContext);
// 转换为十六进制字符串
std::string hashString;
char hexChar[3];
for (int i = 0; i < SHA_DIGEST_LENGTH; ++i) {
sprintf(hexChar, "%02x", hash[i]);
hashString += hexChar;
}
return hashString;
}
int main() {
std::string filePath = "example.txt";
std::string hash = getFileHash(filePath);
std::cout << "Hash of " << filePath << ": " << hash << std::endl;
return 0;
}
```
在上述示例代码中,我们使用了OpenSSL库中的SHA1哈希函数来计算文件的哈希值。你需要安装并正确配置OpenSSL库才能编译和运行此代码。请确保将`example.txt`替换为你要加密的文件路径。
请注意,使用哈希函数生成的摘要并不是可逆的加密算法。如果你需要对文件进行加密,可以考虑使用对称加密算法(如AES加密算法)或非对称加密算法(如RSA加密算法),这些算法可以提供加密和解密的功能。
阅读全文