C语言生成SHA1校验码,记下备用。
/*sha1.h*/
#ifndef _SHA1_H
#define _SHA1_H
#define uint8 unsigned char
#define uint32 unsigned long int
struct sha1_context
{
uint32 total[2];
uint32 state[5];
uint8 buffer[64];
};
void sha1_starts( struct sha1_context *ctx );
void sha1_update( struct sha1_context *ctx, uint8 *input, uint32 length );
void sha1_finish( struct sha1_context *ctx, uint8 digest[20] );
#endif /* sha1.h */
/*sha1.c*/
/*
* FIPS 180-1 compliant SHA-1 implementation
*/
#include <string.h>
#include "sha1.h"
#define GET_UINT32(n,b,i) \
{ \
(n) = (uint32) ((uint8 *) b)[(i)+3] \
| (((uint32) ((uint8 *) b)[(i)+2]) << 8) \
| (((uint32) ((uint8 *) b)[(i)+1]) << 16) \
| (((uint32) ((uint8 *) b)[(i)] ) << 24); \
}
#define PUT_UINT32(n,b,i) \
{ \
(((uint8 *) b)[(i)+3]) = (uint8) (((n) ) & 0xFF); \
(((uint8 *) b)[(i)+2]) = (uint8) (((n) >> 8) & 0xFF); \
(((uint8 *) b)[(i)+1]) = (uint8) (((n) >> 16) & 0xFF); \
(((uint8 *) b)[(i)] ) = (uint8) (((n) >> 24) & 0xFF); \
}
void sha1_starts( struct sha1_context *ctx )
{
ctx->total[0] = 0;
ctx->total[1] = 0;
ctx->state[0] = 0x67452301;
ctx->state[1] = 0xEFCDAB89;
c