OpenSSL之SHA256学习

主要函数

用到的函数主要有以下几个:
1.SHA256_Init 用于初始化一个SHA256_CTX结构体
2.SHA256_Update 用于添加文件块来更新SHA256
3.SHA256_Final 获取文件的SHA256
4.SHA256 获取字符串的SHA256

代码实现

#include 
#include 
#include 
#include 

#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;
}

你可能感兴趣的:(算法,学习,c++,c语言)