1.使用openssl计算字符串的sha256主要用到
**unsigned char *SHA256(const unsigned char d, size_t n, unsigned char md);
2.计算文件哈希值使用到三个函数
**void sha256_init(SHA256_CTX *ctx);创建一个上下文
void sha256_update(SHA256_CTX ctx, const BYTE data[], size_t len);不断的读取文件的数据传入
void sha256_final(SHA256_CTX ctx, BYTE hash[]);最后调用获取哈希值
sha256.h
#include<stdio.h>
#include <stdio.h>
#include <string.h>
#include "openssl/sha.h"
#include <stdio.h>
#include <string.h>
#include "openssl/sha.h"
/*计算字符串sha256哈希值
*inparam psrc_str 源字符串
*inparam nsrc_len 源字符串长度
*outparam psha256_value 存放哈希值的指针
*inparam nvalue_length 哈希值指针的长度 最少32
* */
int Sha256_calcuStr(const char *psrc_str, int nsrc_len, unsigned char *psha256_value, int nvalue_length);
/*计算文件sha256哈希值
*inparam pfile 源文件
*outparam psha256_value 存放哈希值的指针
*inparam nvalue_length 哈希值指针的长度 最少32
* */
int sha256_calcufile(const char *pfile, unsigned char *psha256_value, int nvalue_length);
/*输出sha256哈希值
*outparam psha256_value 存放哈希值的指针
*inparam nvalue_length 哈希值指针的长度
* */
void sha256_put(unsigned char *psha256_value, int nlength);
sha256.c
#include "sha256.h"
int Sha256_calcuStr(const char *psrc_str, int nsrc_len, unsigned char *psha256_value, int nvalue_length)
{
if( !psrc_str || !psha256_value)
{
printf(" pter NULL\n");
return -1;
}
if( nvalue_length < SHA256_DIGEST_LENGTH )
{
printf("value length erro\n");
return -1;
}
if (SHA256((unsigned char*)psrc_str, nsrc_len, psha256_value) == NULL) {
printf("sha256 erro\n");
return -1;
}
return 0;
}
void sha256_put(unsigned char *psha256_value, int nlength)
{
if( !psha256_value )
{
printf(" pter NULL\n");
return;
}
for (int i = 0; i < nlength; i++) {
printf("%02x ", psha256_value[i]);
}
printf("\n");
}
int sha256_calcufile(const char *pfile, unsigned char *psha256_value, int nvalue_length)
{
FILE* fp;
SHA256_CTX ctx;
const int SIZE = 1025;
char abuf[SIZE];
if( !pfile || !psha256_value )
{
printf(" pter NULL\n");
return -1;
}
if( nvalue_length < SHA256_DIGEST_LENGTH )
{
printf("value length erro\n");
return -1;
}
memset(abuf, 0, SIZE);
/* 打开文件 */
fp = fopen(pfile,"rb");
if (fp == NULL) {
printf("Can't open \"%s\"", pfile);
return -1;
}
/* 初始化指针 */
SHA256_Init(&ctx);
size_t nlen = 0;
while(1)
{
if ((nlen = fread(abuf,1, 1024,fp)) <= 0)
{
break;
}
SHA256_Update(&ctx, abuf, nlen);
}
/*生成哈希值 */
SHA256_Final(psha256_value, &ctx);
fclose(fp);
}
int main()
{
char str[10] = "123456789\n";
unsigned char avalue[32];
memset(avalue, 0, 32);
Sha256_calcuStr(str, 10, avalue, 32);
sha256_put(avalue,32);
sha256_calcufile("/opt/pis/bin/Project/data/MPDMedia/gaobaiqiqiu.mp4",avalue, 32);
sha256_put(avalue,32);
return 0;
}