首页
社区
课程
招聘
[求助]MD5加密的问题,熟悉的兄弟帮我瞅瞅
发表于: 2007-7-14 21:27 5368

[求助]MD5加密的问题,熟悉的兄弟帮我瞅瞅

2007-7-14 21:27
5368
最近开始准备毕业设计,我准备做算法的FPGA硬件加速...想了想,还是选了MD5(虽然被破了)...以前用MD5都是直接用的现成的C++类,由于是针对FPGA硬件的C语言,有很多语言限制(指针限制很大),只好把MD5写一遍.自己写起来还真郁闷,始终结果不对.....郁闷死了,主要部分都是固定的,我写的如下,哪位兄弟帮我瞅瞅啊~~:
第一部分:填充.
    len=strlen(instr); //字符串已经读入在char instr[]中
    i=len*8; //字符串的bit长度
    n=len/64; //
    m=len%64;
    //填补字符串
    if(m!=56)  
    {     
      instr[len++]=0x80;  //第一bit添1
      n=len/64;
      m=len%64;
      while(m!=56)
      {
        instr[len++]=0x00; //其余bit添0
        n=len/64;
        m=len%64;
      }        
    }
    (co_int64)instr[len]=i;//最后填充64位的bit长度值
第二部分:
#define f(x,y,z) ((x&y)|((~x)&z))
#define g(x,y,z) ((x&z)|(y&(~z)))
#define h(x,y,z) (x^y^z)
#define i(x,y,z) (y^(x|(~z)))

#define leftrotate(x,n) (((x) << (n))|((x)>>(32-(n))))

#define FF(a, b, c, d, x, s, ac) { \
(a) += f((b),(c),(d))+(x)+(UINT)(ac); \
(a) = leftrotate((a),(s)); \
(a) += (b); \
}
#define GG(a,b,c,d,x,s,ac) { \
(a) += g((b),(c),(d)) + (x) + (UINT)(ac); \
(a) = leftrotate((a),(s)); \
(a) += (b); \
}
#define HH(a,b,c,d,x,s,ac) { \
(a) += h((b),(c),(d)) + (x) + (UINT)(ac); \
(a) = leftrotate((a),(s)); \
(a) += (b); \
}
#define II(a,b,c,d,x,s,ac) { \
(a) += i((b),(c),(d)) + (x) + (UINT)(ac); \
(a) = leftrotate((a),(s)); \
(a) += (b); \
}

#define S11 7  
#define S12 12  
#define S13 17  
#define S14 22  
#define S21 5  
#define S22 9  
#define S23 14  
#define S24 20  
#define S31 4  
#define S32 11  
#define S33 16  
#define S34 23  
#define S41 6  
#define S42 10  
#define S43 15  
#define S44 21
第三部分:
co_int32 data[MEMORY_SIZE/4];  //co_int32为32位有符号int
offset = 0;
co_memory_readblock(Input, offset, data, mstrlen/4 * sizeof(co_int32));//相当于从填充后的内存块中32位地读入到data数组中
co_int32 aa=0x67452301;
co_int32 bb=0xefcdab89;
co_int32 cc=0x98badcfe;
co_int32 dd=0x10325476;
for ( i = 0; i < (mstrlen/64) ; i++ )  //mstrlen是填充后的byte长度
{
        for ( j = 0; j< 16 ;j++)pM[j]=data[i*16+j];   
        a=aa;
        b=bb;
        c=cc;
        d=dd;      
        FF (a, b, c, d, pM[ 0], S11, 0xd76aa478); //- 1 -
        FF (d, a, b, c, pM[ 1], S12, 0xe8c7b756); //- 2 -
        FF (c, d, a, b, pM[ 2], S13, 0x242070db); //- 3 -
        FF (b, c, d, a, pM[ 3], S14, 0xc1bdceee); //- 4 -
        FF (a, b, c, d, pM[ 4], S11, 0xf57c0faf); //- 5 -
        FF (d, a, b, c, pM[ 5], S12, 0x4787c62a); //- 6 -
        FF (c, d, a, b, pM[ 6], S13, 0xa8304613); //- 7 -
        FF (b, c, d, a, pM[ 7], S14, 0xfd469501); //- 8 -
        FF (a, b, c, d, pM[ 8], S11, 0x698098d8); //- 9 -
        FF (d, a, b, c, pM[ 9], S12, 0x8b44f7af); //- 10 -
        FF (c, d, a, b, pM[10], S13, 0xffff5bb1); //- 11 -
        FF (b, c, d, a, pM[11], S14, 0x895cd7be); //- 12 -
        FF (a, b, c, d, pM[12], S11, 0x6b901122); //- 13 -
        FF (d, a, b, c, pM[13], S12, 0xfd987193); //- 14 -
        FF (c, d, a, b, pM[14], S13, 0xa679438e); //- 15 -
        FF (b, c, d, a, pM[15], S14, 0x49b40821); //- 16 -
      
       //第二轮--------------------------------->
        GG (a, b, c, d, pM[ 1], S21, 0xf61e2562); //- 17 -
        GG (d, a, b, c, pM[ 6], S22, 0xc040b340); //- 18 -
        GG (c, d, a, b, pM[11], S23, 0x265e5a51); //- 19 -
        GG (b, c, d, a, pM[ 0], S24, 0xe9b6c7aa); //- 20 -
        GG (a, b, c, d, pM[ 5], S21, 0xd62f105d); //- 21 -
        GG (d, a, b, c, pM[10], S22,  0x2441453); //- 22 -
        GG (c, d, a, b, pM[15], S23, 0xd8a1e681); //- 23 -
        GG (b, c, d, a, pM[ 4], S24, 0xe7d3fbc8); //- 24 -
        GG (a, b, c, d, pM[ 9], S21, 0x21e1cde6); //- 25 -
        GG (d, a, b, c, pM[14], S22, 0xc33707d6); //- 26 -
        GG (c, d, a, b, pM[ 3], S23, 0xf4d50d87); //- 27 -
        GG (b, c, d, a, pM[ 8], S24, 0x455a14ed); //- 28 -
        GG (a, b, c, d, pM[13], S21, 0xa9e3e905); //- 29 -
        GG (d, a, b, c, pM[ 2], S22, 0xfcefa3f8); //- 30 -
        GG (c, d, a, b, pM[ 7], S23, 0x676f02d9); //- 31 -
        GG (b, c, d, a, pM[12], S24, 0x8d2a4c8a); //- 32 -
      
       //第三轮--------------------------------->
        HH (a, b, c, d, pM[ 5], S31, 0xfffa3942); //- 33 -
        HH (d, a, b, c, pM[ 8], S32, 0x8771f681); //- 34 -
        HH (c, d, a, b, pM[11], S33, 0x6d9d6122); //- 35 -
        HH (b, c, d, a, pM[14], S34, 0xfde5380c); //- 36 -
        HH (a, b, c, d, pM[ 1], S31, 0xa4beea44); //- 37 -
        HH (d, a, b, c, pM[ 4], S32, 0x4bdecfa9); //- 38 -
        HH (c, d, a, b, pM[ 7], S33, 0xf6bb4b60); //- 39 -
        HH (b, c, d, a, pM[10], S34, 0xbebfbc70); //- 40 -
        HH (a, b, c, d, pM[13], S31, 0x289b7ec6); //- 41 -
        HH (d, a, b, c, pM[ 0], S32, 0xeaa127fa); //- 42 -
        HH (c, d, a, b, pM[ 3], S33, 0xd4ef3085); //- 43 -
        HH (b, c, d, a, pM[ 6], S34,  0x4881d05); //- 44 -
        HH (a, b, c, d, pM[ 9], S31, 0xd9d4d039); //- 45 -
        HH (d, a, b, c, pM[12], S32, 0xe6db99e5); //- 46 -
        HH (c, d, a, b, pM[15], S33, 0x1fa27cf8); //- 47 -
        HH (b, c, d, a, pM[ 2], S34, 0xc4ac5665); //- 48 -
      
        //第四轮-------------------------------->
        II (a, b, c, d, pM[ 0], S41, 0xf4292244); //- 49 -
        II (d, a, b, c, pM[ 7], S42, 0x432aff97); //- 50 -
        II (c, d, a, b, pM[14], S43, 0xab9423a7); //- 51 -
        II (b, c, d, a, pM[ 5], S44, 0xfc93a039); //- 52 -
        II (a, b, c, d, pM[12], S41, 0x655b59c3); //- 53 -
        II (d, a, b, c, pM[ 3], S42, 0x8f0ccc92); //- 54 -
        II (c, d, a, b, pM[10], S43, 0xffeff47d); //- 55 -
        II (b, c, d, a, pM[ 1], S44, 0x85845dd1); //- 56 -
        II (a, b, c, d, pM[ 8], S41, 0x6fa87e4f); //- 57 -
        II (d, a, b, c, pM[15], S42, 0xfe2ce6e0); //- 58 -
        II (c, d, a, b, pM[ 6], S43, 0xa3014314); //- 59 -
        II (b, c, d, a, pM[13], S44, 0x4e0811a1); //- 60 -
        II (a, b, c, d, pM[ 4], S41, 0xf7537e82); //- 61 -
        II (d, a, b, c, pM[11], S42, 0xbd3af235); //- 62 -
        II (c, d, a, b, pM[ 2], S43, 0x2ad7d2bb); //- 63 -
        II (b, c, d, a, pM[ 9], S44, 0xeb86d391); //- 64 -
        aa+=a;
        bb+=b;
        cc+=c;
        dd+=d;
}
最后输出aa&bb&cc&dd结果不对???中间哪里有错吗???哪位兄弟帮帮忙啊~~

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=;]...[/QUOTE]
大哥。。你毕业就做个md5啊。。。光源代码网上就一堆。。。
2007-7-15 10:01
0
雪    币: 225
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
额````算法不是关键,自己也写不出什么算法来,随便哪种算法也都只有找现成的,只是做做FPGA硬件加速,好歹把加密速度提高2-3个数量级以上吧....
2007-7-15 19:56
0
游客
登录 | 注册 方可回帖
返回
//