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

📄 sha加密算法.txt

📁 SHA加密算法是目前广为应用的重要加密方法之一。而SHA-1 生成 160 位的消息摘要
💻 TXT
字号:
SHA加密算法是目前广为应用的重要加密方法之一。而SHA-1 生成 160 位的消息摘要,虽然执行更慢,却被认为更安全。明文消息的最大长度可达到 264 位。下面是网络上流传的SHA算法,我们自己调试了一下,已经通过。现把主函数和算法函数贴出来。
/********************** 主函数*****************/
#include "mbshaee.h"
#include "stdio.h"

void main()
{
 unsigned MT[64]={0x00};
 unsigned *pMT;
 int i = 0 ;
 long A = 0x00000000,B = 0x00000000,C = 0x00000000,D = 0x00000000,E = 0x00000000;
 long *pA,*pB,*pC,*pD,*pE;

    pA=&A;pB=&B,pC=&C,pD=&D,pE=&E;
 pMT = MT;
 /*****   设定输入值MT *******/

 MT[0] = 0x00 ;
 printf("0x%0x\n",MT[0]);
 for(  i = 0 ; i<63 ; i++ )
 {
  MT[i+1] = MT[i] + 0x01 ;
  printf("0x%0x\n",MT[i+1]);
 }
 
 ComputeSHA(pMT,pA,pB,pC,pD,pE); 
 
 printf("0x%0x\n",A);
 printf("0x%0x\n",B);
 printf("0x%0x\n",C);
 printf("0x%0x\n",D);
 printf("0x%0x\n",E);
 
}

/********************* mbshaee.h *****************/

#define SIZE_SHAEE 32

void ComputeSHA(unsigned int *MT,long *A,long *B, long *C, long *D,long *E);
long KTN (int n);
long NLF (long B, long C, long D, int n);

/********************* mbshaee.h *****************/


#include "mbshaee.h"

 

/*%%%%%%%%void setChallenge(uchar *new_challenge)
{
   int i;

   for(i=0;i<8;i++)
      challenge[i] = new_challenge[i];
}
*/
//----------------------------------------------------------------------
// Compute the 160-bit MAC
//
// 'MT'  - input data
// 'A'   - part of the 160 bits
// 'B'   - part of the 160 bits
// 'C'   - part of the 160 bits
// 'D'   - part of the 160 bits
// 'E'   - part of the 160 bits
//
//
void ComputeSHA(unsigned int *MT,long *A,long *B, long *C, long *D,long *E)
{
   unsigned long MTword[80];
   int i;
   long ShftTmp;
   long Temp;

   for(i=0;i<16;i++)
      MTword[i] = (MT[i*4] << 24) | (MT[i*4+1] << 16) |
                  (MT[i*4+2] << 8) | MT[i*4+3];

   for(i=16;i<80;i++)
   {
      ShftTmp = MTword[i-3] ^ MTword[i-8] ^ MTword[i-14] ^ MTword[i-16];
      MTword[i] = ((ShftTmp << 1) & 0xfffffffe) | 
                  ((ShftTmp >> 31) & 0x00000001);
   }

   *A=0x67452301;
   *B=0xefcdab89;
   *C=0x98badcfe;
   *D=0x10325476;
   *E=0xc3d2e1f0;

   for(i=0;i<80;i++)
   {
      ShftTmp = ((*A << 5) & 0xffffffe0) | ((*A >> 27) & 0x0000001f);
      Temp = NLF(*B,*C,*D,i) + *E + KTN(i) + MTword[i] + ShftTmp;
      *E = *D;
      *D = *C;
      *C = ((*B << 30) & 0xc0000000) | ((*B >> 2) & 0x3fffffff);
      *B = *A;
      *A = Temp;
   }
}

// calculation used for the MAC
long KTN (int n)
{
   if(n<20)
      return 0x5a827999;
   else if (n<40)
      return 0x6ed9eba1;
   else if (n<60)
      return 0x8f1bbcdc;
   else
      return 0xca62c1d6;
}

// calculation used for the MAC
long NLF (long B, long C, long D, int n)
{
   if(n<20)
      return ((B&C)|((~B)&D));
   else if(n<40)
      return (B^C^D);
   else if(n<60)
      return ((B&C)|(B&D)|(C&D));
   else
      return (B^C^D);
}

⌨️ 快捷键说明

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