SHA1算法 C语言实现
实现了计算字符串,文件的SHA1值
算法来自百度百科
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define SHA1_ROTL(a,b) (SHA1_tmp=(a),((SHA1_tmp>>(32-b))&(0x7fffffff>>(31-b)))|(SHA1_tmp<<b))
#define SHA1_F(B,C,D,t) ((t<40)?((t<20)?((B&C)|((~B)&D)):(B^C^D)):((t<60)?((B&C)|(B&D)|(C&D)):(B^C^D)))
long SHA1_tmp;
extern char* StrSHA1(const char* str, long long length, char* sha1){
/*
计算字符串SHA-1
参数说明:
str 字符串指针
length 字符串长度
sha1 用于保存SHA-1的字符串指针
返回值为参数sha1
*/
char *pp, *ppend;
long l, i, K[80], W[80], TEMP, A, B, C, D, E, H0, H1, H2, H3, H4;
H0 = 0x67452301, H1 = 0xEFCDAB89, H2 = 0x98BADCFE, H3 = 0x10325476, H4 = 0xC3D2E1F0;
for (i = 0; i < 20; K[i++] = 0x5A827999);
for (i = 20; i < 40; K[i++] = 0x6ED9EBA1);
for (i = 40; i < 60; K[i++] = 0x8F1BBCDC);
for (i = 60; i < 80; K[i++] = 0xCA62C1D6);
l = length + ((length % 64 > 56) ? (128 - length %