设为首页 加入收藏

TOP

C语言获取文件的SHA1哈希值(二)
2015-01-22 21:34:16 来源: 作者: 【 】 浏览:121
Tags:语言 获取 文件 SHA1 哈希
Put); return; } sha1_init (&ctx); while ( (n = fread (buffer, 1, sizeof buffer, fp))) sha1_write (&ctx, (unsigned char *)buffer, n); if (ferror (fp)) { printf("读取文件“%s”失败\n", FileNameInPut); return; } sha1_final (&ctx); fclose (fp); for ( i=0; i < 20; i++) { printf("%02x",ctx.buf[i]); } }

适合程序中调用的返回值方式:

/*获取文件的SHA1值,如果发生错误则将错误信息写入outError
* FileNameInPut:文件路径
* outSHA1:SHA1输出变量
* outError:错误信息输出变量
* returns:outSHA1
*/
char *GetFileSHA1(char *FileNameInPut, char *outSHA1, char *outError)
{
	if(FileNameInPut==NULL) 
	{
		if (outError != NULL)
		{
			sprintf(outError, "%s", "FileNameInPut Is NULL");
		}
		return outSHA1;
	}
	FILE *fp;
	char buffer[4096];
	size_t n;
	SHA1_CONTEXT ctx;
	int i;

	fopen_s (&fp, FileNameInPut, "rb");
	if (!fp)			
	{
		if (outError != NULL)
		{
			sprintf(outError, "打开文件“%s”失败\n", FileNameInPut);
		}
		return outSHA1;
	}
	sha1_init (&ctx);
	while ( (n = fread (buffer, 1, sizeof buffer, fp)))		sha1_write (&ctx, (unsigned char *)buffer, n);
	if (ferror (fp))
	{
		if (outError != NULL)
		{
			sprintf(outError, "读取文件“%s”失败\n", FileNameInPut);
		}
		return outSHA1;
	}
	sha1_final (&ctx);
	fclose (fp);

	for ( i=0; i < 20; i++)
	{
		sprintf(outSHA1 + 2*i, "%02x", (unsigned char)ctx.buf[i]);
	}
	outSHA1[2*i] = '\0';
	return outSHA1;
}
水平有限,此方法只是简单的实现,还有些问题没有解决,希望高手指点一二,小弟不胜感激!

用法示例:

//用法实例:
int main (int argc, char **argv)
{
	GetFileSHA1(*(argv+1));

	printf("\r\n");
	char sha1[41] = { 0 };
	char eror[256] = { 0 };
	printf("%s\r\n", GetFileSHA1(*(argv+1), sha1, NULL));
	if (strlen(eror) != 0)
	{
		printf("获取SHA1发生错误:%s\r\n", eror);
	}

	printf("%s\r\n", GetFileSHA1(*(argv+1), sha1, eror));
	if (strlen(eror) != 0)
	{
		printf("获取SHA1发生错误:%s\r\n", eror);
	}
	getchar();
	return 0;
}

命令提示符下用法:

下载:http://download.csdn.net/detail/testcs_dn/7332933

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言默认参数值的实现 下一篇C语言 如何获取文件名称 system d..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: