⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arithmetic.c

📁 SHA1算法的C实现 比较适用于一些微控制器加密处理
💻 C
字号:
#include "sha1.h"
#include "string.h"

#define S(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
#define w(i) (BUFFER->W[i&15] = S(BUFFER->W[(i+13)&15]^BUFFER->W[(i+8)&15] \
    ^BUFFER->W[(i+2)&15]^BUFFER->W[i&15],1))

void standard_sha1(uchar *ucInData,uchar len,uchar *ucOutData)
{
	uchar t;
//    uchar i;
	word A,B,C,D,E;
	WBBUFFER *BUFFER;
	word wdTemp;
	word H[5];
	static uchar ucWorkSpace[64];
	BUFFER = (WBBUFFER *)ucWorkSpace;
	if(len > 55)
	{
		return;
	}
	t = 0;
	H[0] = 0x67452301; 
	H[1] = 0xEFCDAB89;
	H[2] = 0x98BADCFE;
	H[3] = 0x10325476;
	H[4] = 0xC3D2E1F0;
	
	memcpy(BUFFER->w,ucInData,len);

	BUFFER->w[len] = 0x80;   //?1
	
	for (t=len+1;t<56;t++)
	{
		BUFFER->w[t] = 0x0;	
	}
	BUFFER->W[14] = 0;
	BUFFER->W[15] = len*8;
	t = 0;
	wdTemp = 0;
	A = H[0];
	B = H[1];
	C = H[2];
	D = H[3];
	E = H[4];
	for (t = 0;t<80;t++)
	{
		wdTemp += S(A,5);
		if(t<16)
		{
			wdTemp += BUFFER->W[t];
		}
		else
		{
			wdTemp += w(t);
		}
		
		if(t>=0 && t<=19)               
		{
			wdTemp += ((B&(C^D))^D) + 0x5A827999 + E;
		}
		if(t>=20 && t<=39)
		{
			wdTemp += (B^C^D) + 0x6ED9EBA1 + E;
		}
		if(t>=40 && t<=59)
		{
			wdTemp += ((B&C)|(B&D)|(C&D)) + 0x8F1BBCDC + E;
		}
		if(t>=60 && t<=79)
		{
			wdTemp += (B^C^D) + 0xCA62C1D6 + E;	
		}
		E = D; D = C; C = S(B,30); B = A; A = wdTemp;
		wdTemp = 0;
	}
	H[0] = H[0] + A;H[1] = H[1] + B;H[2]= H[2] + C;H[3] = H[3] + D;H[4] = H[4] + E;
	/*
    for(t = 0;t<5;t++)
	{
		H[t] = (S(H[t],24)&0xFF00FF00)|(S(H[t],8)&0x00FF00FF);
	}
    */
	memcpy(ucOutData,&H[0],20); 
}
                  

⌨️ 快捷键说明

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