スポンサーリンク

C言語でsha1を計算するには、以下の構造体と関数を利用してます。

	SHA_CTX c;
	SHA1_Init(&c);
	SHA1_Update(&c,buf,(unsigned long)i);
	SHA1_Final(&(md[0]),&c);

以下は、FreeBSDのsha1のプログラムです。
コメントは、一部長いので消してしまってます。

/usr/src/crypto/openssl/crypto/sha/sha1.c

コンパイルするには、 -lmd オプションが必要です。
md は、 Message Digest の略です。
つまり Message Digest ライブラリということです。

FreeBSDでコンパイルする。
gcc -lmd sha1.c

Linuxでコンパイルする。
gcc -lssl sha1.c

/* crypto/sha/sha1.c */
#include <stdio.h>
#include <stdlib.h>
#include <openssl/sha.h>

#define BUFSIZE	1024*16

void do_fp(FILE *f);
void pt(unsigned char *md);
#ifndef _OSD_POSIX
int read(int, void *, unsigned int);
#endif

int main(int argc, char **argv)
{
	int i,err=0;
	FILE *IN;

	if (argc == 1)
	{
		do_fp(stdin);
	}
	else
	{
		for (i=1; i<argc; i++)
		{
			IN=fopen(argv[i],"r");
			if (IN == NULL)
			{
				perror(argv[i]);
				err++;
				continue;
			}
			printf("SHA1(%s)= ",argv[i]);
			do_fp(IN);
			fclose(IN);
		}
	}
	exit(err);
}

void do_fp(FILE *f)
{
	SHA_CTX c;
	unsigned char md[SHA_DIGEST_LENGTH];
	int fd;
	int i;
	unsigned char buf[BUFSIZE];

	fd=fileno(f);
	SHA1_Init(&c);
	for (;;)
	{
		i=read(fd,buf,BUFSIZE);
		if (i <= 0) break;
		SHA1_Update(&c,buf,(unsigned long)i);
	}
	SHA1_Final(&(md[0]),&c);
	pt(md);
}

void pt(unsigned char *md)
{
	int i;

	for (i=0; i<SHA_DIGEST_LENGTH; i++)
		printf("%02x",md[i]);
	printf("\n");
}


スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー