shaxtra.c

来自「source of perl for linux application,」· C语言 代码 · 共 58 行

C
58
字号
#include <stdio.h>#include <string.h>#include "sha.h"static unsigned char *shacomp(alg, fmt, bitstr, bitcnt)int alg;int fmt;unsigned char *bitstr;unsigned long bitcnt;{	SHA *s;	static unsigned char digest[SHA_MAX_HEX_LEN+1];	unsigned char *ret = digest;	if ((s = shaopen(alg)) == NULL)		return(NULL);	shawrite(bitstr, bitcnt, s);	shafinish(s);	if (fmt == SHA_FMT_RAW)		memcpy(digest, shadigest(s), s->digestlen);	else if (fmt == SHA_FMT_HEX)		strcpy((char *) digest, shahex(s));	else if (fmt == SHA_FMT_BASE64)		strcpy((char *) digest, shabase64(s));	else		ret = NULL;	shaclose(s);	return(ret);}#define SHA_DIRECT(type, name, alg, fmt) 			\type name(bitstr, bitcnt)					\unsigned char *bitstr;						\unsigned long bitcnt;						\{								\	return((type) shacomp(alg, fmt, bitstr, bitcnt));	\}SHA_DIRECT(unsigned char *, sha1digest, SHA1, SHA_FMT_RAW)SHA_DIRECT(char *, sha1hex, SHA1, SHA_FMT_HEX)SHA_DIRECT(char *, sha1base64, SHA1, SHA_FMT_BASE64)SHA_DIRECT(unsigned char *, sha224digest, SHA224, SHA_FMT_RAW)SHA_DIRECT(char *, sha224hex, SHA224, SHA_FMT_HEX)SHA_DIRECT(char *, sha224base64, SHA224, SHA_FMT_BASE64)SHA_DIRECT(unsigned char *, sha256digest, SHA256, SHA_FMT_RAW)SHA_DIRECT(char *, sha256hex, SHA256, SHA_FMT_HEX)SHA_DIRECT(char *, sha256base64, SHA256, SHA_FMT_BASE64)SHA_DIRECT(unsigned char *, sha384digest, SHA384, SHA_FMT_RAW)SHA_DIRECT(char *, sha384hex, SHA384, SHA_FMT_HEX)SHA_DIRECT(char *, sha384base64, SHA384, SHA_FMT_BASE64)SHA_DIRECT(unsigned char *, sha512digest, SHA512, SHA_FMT_RAW)SHA_DIRECT(char *, sha512hex, SHA512, SHA_FMT_HEX)SHA_DIRECT(char *, sha512base64, SHA512, SHA_FMT_BASE64)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?