主要函数
用到的函数主要有以下几个:
1.SHA256_Init
用于初始化一个SHA256_CTX结构体
2.SHA256_Update
用于添加文件块来更新SHA256
3.SHA256_Final
获取文件的SHA256
4.SHA256
获取字符串的SHA256
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/sha.h>
#define MAX_DATA_LEN 1024
#define SHA256_LENTH 32
int main(int argc, char** argv)
{
SHA256_CTX sha256_ctx;
FILE* fp = NULL;
char* strFilePath = "C:\\Users\\30797\\Desktop\\123.txt";
unsigned char SHA256result[SHA256_LENTH];
char DataBuff[MAX_DATA_LEN];
int len;
int t = 0;
int i;
fopen_s(&fp,strFilePath, "rb"); //打开文件
do
{
//初始化SHA256
SHA256_Init(&sha256_ctx);
//循环获取所有文件的中的文件块用于更新SHA256
while (!feof(fp))
{
memset(DataBuff, 0x00, sizeof(DataBuff));
//读取文件块,大小为1024
len = fread(DataBuff, 1, MAX_DATA_LEN, fp);
if (len)
{
t += len;
SHA256_Update(&sha256_ctx, DataBuff, len); //将当前文件块加入并更新SHA256
}
}
//获取SHA256
SHA256_Final(SHA256result, &sha256_ctx);
//将文件的SHA256以16进制输出
puts("file SHA256:");
for (i = 0; i < SHA256_LENTH; i++)
{
printf("%02x", (int)SHA256result[i]);
}
puts("\n");
} while (0);
//获取输入路径字符串SHA256
SHA256((const unsigned char*)strFilePath, strlen(strFilePath), SHA256result);
//将路径名的SHA256以16进制输出
puts("string SHA256:");
for (i = 0; i < SHA256_LENTH; i++)
{
printf("%02x", (int)SHA256result[i]);
}
puts("\n");
return 0;
}