• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: C/C++
  • 标签: C语言  

资源简介

md5加密算法 C语言(经过测试验证完整版)
经过调试验证,与工具结果一致

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

资源截图

代码片段和文件信息

#include 
#include “md5.h“
 
unsigned char PADDING[]={0x80000000000000000
                         0000000000000000
                         0000000000000000
                         0000000000000000};
                         
void MD5Init(MD5_CTX *context)
{
     context->count[0] = 0;
     context->count[1] = 0;
     context->state[0] = 0x67452301;
     context->state[1] = 0xEFCDAB89;
     context->state[2] = 0x98BADCFE;
     context->state[3] = 0x10325476;
}
void MD5Update(MD5_CTX *contextunsigned char *inputunsigned int inputlen)
{
    unsigned int i = 0index = 0partlen = 0;
    index = (context->count[0] >> 3) & 0x3F;
    partlen = 64 - index;
    context->count[0] += inputlen << 3;
    if(context->count[0] < (inputlen << 3))
       context->count[1]++;
    context->count[1] += inputlen >> 29;
    
    if(inputlen >= partlen)
    {
       memcpy(&context->buffer[index]inputpartlen);
       MD5Transform(context->statecontext->buffer);
       for(i = partlen;i+64 <= inputlen;i+=64)
           MD5Transform(context->state&input[i]);
       index = 0;        
    }  
    else
    {
        i = 0;
    }
    memcpy(&context->buffer[index]&input[i]inputlen-i);
}
void MD5Final(MD5_CTX *contextunsigned char digest[16])
{
    unsigned int index = 0padlen = 0;
    unsigned char bits[8];
    index = (context->count[0] >> 3) & 0x3F;
    padlen = (index < 56)?(56-index):(120-index);
    MD5Encode(bitscontext->count8);
    MD5Update(contextPADDINGpadlen);
    MD5Update(contextbits8);
    MD5Encode(digestcontext->state16);
}
void MD5Encode(unsigned char *outputunsigned int *inputunsigned int len)
{
    unsigned int i = 0j = 0;
    while(j < len)
    {
         output[j] = input[i] & 0xFF;  
         output[j+1] = (input[i] >> 8) & 0xFF;
         output[j+2] = (input[i] >> 16) & 0xFF;
         output[j+3] = (input[i] >> 24) & 0xFF;
         i++;
         j+=4;
    }
}
void MD5Decode(unsigned int *outputunsigned char *inputunsigned int len)
{
     unsigned int i = 0j = 0;
     while(j < len)
     {
           output[i] = (input[j]) |
                       (input[j+1] << 8) |
                       (input[j+2] << 16) |
                       (input[j+3] << 24);
           i++;
           j+=4; 
     }
}
void MD5Transform(unsigned int state[4]unsigned char block[64])
{
     unsigned int a = state[0];
     unsigned int b = state[1];
     unsigned int c = state[2];
     unsigned int d = state[3];
     unsigned int x[64];
     MD5Decode(xblock64);
     FF(a b c d x[ 0] 7 0xd76aa478); /* 1 */
 FF(d a b c x[ 1] 12 0xe8c7b756); /* 2 */
 FF(c d a b x[ 2] 17 0x242070db); /* 3 */
 FF(b c d a x[ 3] 22 0xc1bdceee); /* 4 */
 FF(a b c d x[ 4] 7 0xf57c0faf); /* 5 */
 FF(d a b c x[ 5] 12 0x4787c62a); /* 6 */
 FF(c d a b x[ 6] 17 0xa8304613); /

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5980  2014-02-23 23:04  src\md5.c

     文件       1471  2016-11-15 20:38  src\md5.h

     文件        599  2016-11-14 22:40  src\test.c

     目录          0  2016-11-16 16:16  src

----------- ---------  ---------- -----  ----

                 8050                    4


评论

共有 条评论