纯c语言实现md5算法Pure C language implementation of MD5algorithm
Here is the code
Baidu needs points. I upload an integral that doesn't needpoints.
/ / pure to delete this comment can be confused with.#include<stdio.h>
#define F (x, y, z) (( (x) & (y) ) | ( (~x) & (z)))
#define G (x, y, z) (( (x) & (z) ) | ( (y) & (~z)))
#def ine, H (x, y, z) ( (x) ^ (y) ^ (z))
#define I (x, y, z) ((y) ^ ( (x) | (~z)) )
/ / pure to delete this comment can be confused with.#define RL (x, y) (((x) , (y) ( | ) (x) "(32 - (y)) )) //x y leftshift
#def ine PP (x) (x<<24) | ((x<<8) &0xff0000) | ((x>>8) &0xff00)| (x>>24) / / x high and low swap, such as PP (aabbccdd)=ddccbbaa
#def ine, FF (a, B, C, D, x, s, AC) a = B + (RL ((a +F (B, C,d) + X + AC) , s) )
#def ine, GG (a, B, C, D, x, s, AC) a = B + (RL ((a +G (B, C,d) + X + AC) , s) )
#def ine, HH (a, B, C, D, x, s, AC) a = B + (RL ((a +H (B, C,d) + X + AC) , s) )
#def ine, I I (a, B, C, D, x, s, AC) a = B + (RL ((a + I (B, C,d) + X + AC) , s) )
Unsigned, A, C, D, a, B, B, C, D, I, len, f len[2] , x[16], , //itemporary variables, len file length, and flen[2] initial filelength of binary binary representation
Char filename[200] ; / / f ile name
FILE *fp;
/ / pure to delete this comment can be confused with.Void MD5 () {//MD5 core algorithm for the 64 round
A=A, b=B, c=C, d=D;
/**//* Round * 1
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) ; /**//* 7.FF (B, C, D, a, x[, 7] , 22, 0xf d469501) ; /**//* 8.FF (a, B, C, D, x[, 8] , 7, 0x698098d8) ; /**//* 9.FF (D, a, B, C, x[, 9] , 12, 0x8b44f7af) ; /**//* 10.FF (C, D, a, B, x[10], 17, 0xffff5bb1) ; /**//* 11.FF (B, C, D, a, x[11], 22, 0x895cd7be) ; /**//* 12.FF (a, B, C, D, x[12], 7, 0x6b901122) ; /**//* 13.FF (D, a, B, C, x[13], 12, 0xfd987193) ; /**//* 14.FF (C, D, a, B, x[14], 17, 0xa679438e) ; /**//* 15.FF (B, C, D, a, x[15], 22, 0x49b40821) ; /**//* 16./**//* Round * 2
GG (a, B, C, D, x[, 1] , 5, 0xf61e2562) ; /**//* 17.
GG (D, a, B, C, x[, 6] , 9, 0xc040b340) ; /**//* 18.GG (C, D, a, B, x[11], 14, 0x265e5a51) ; /**//* 19.GG (B, C, D, a, x[, 0] , 20, 0xe9b6c7aa) ; /**//* 20.GG (a, B, C, D, x[, 5] , 5, 0xd62f105d) ; /**//* 21.GG (D, a, B, C, x[10], 9, 0x02441453) ; /**//* 22.GG (C, D, a, B, x[15], 14, 0xd8a1e681) ; /**//* 23.GG (B, C, D, a, x[, 4] , 20, 0xe7d3fbc8) ; /**//* 24.GG (a, B, C, D, x[, 9] , 5, 0x21e1cde6) ; /**//* 25.GG (D, a, B, C, x[14], 9, 0xc33707d6) ; /**//* 26.GG (C, D, a, B, x[, 3] , 14, 0xf4d50d87) ; /**//* 27.GG (B, C, D, a, x[, 8] , 20, 0x455a14ed) ; /**//* 28.GG (a, B, C, D, x[13], 5, 0xa9e3e905) ; /**//* 29.GG (D, a, B, C, x[, 2] , 9, 0xfcefa3f8) ; /**//* 30.GG (C, D, a, B, x[, 7] , 14, 0x676f02d9) ; /**//* 31.GG (B, C, D, a, x[12], 20, 0x8d2a4c8a) ; /**//* 32./**//* Round * 3
HH (a, B, C, D, x[, 5] , 4, 0xfffa3942) ; /**//* 33.
Hh (D, a, B, C, X [8], 11, 0x8771f681) ; / * * / / * 34 * /Hh (C, D, a, B, X [11] , 16, 0x6d9d6122) ; / * * / / * 35 * /Hh (B, C, D, a, x] [14, 23, 0xfde5380c) ; / * * / / * 36 * /Hh (A, B, C, D, X [1], 4, 0xa4beea44) ; / * * / / * * / 37Hh (D, a, B, C, X [4], 11, 0x4bdecfa9) ; / * * / / * 38 * /Hh (C, D, a, B, X [7], 16, 0xf6bb4b60) ; / * * / / * * / 39Hh (B, C, D, a, X [10] , 23, 0xbebfbc70) ; / * * / / * 40 * /Hh (A, B, C, D, X [13] , 4, 0x289b7ec6) ; / * * / / * * / 41Hh (D, a, B, C, X [0], 11, 0xeaa127fa) ; / * * / / * * / 42Hh (C, D, a, B, X [3], 16, 0xd4ef3085) ; / * * / / * * / 43Hh (B, C, D, a, x] [6, 23, 0x04881d05) ; / * * / / * * / 44Hh (A, B, C, D, X [9], 4, 0xd9d4d039) ; / * * / / * 45 * /Hh (D, a, B, C, X [11, 12], 0xe6db99e5) ; / * * / / * 46 * /Hh (C, D, a, B, x] [15, 16, 0x1fa27cf8) ; / * * / / * 47 * /
Hh (B, C, D, a, X [2], 23, 0xc4ac5665) ; / * * / / * * / 48/ /纯是为了混淆用,删除本注释即可
/ * * / / * * / 4 round
I I (A, B, C, D, X [0], 6, 0xf4292244) ; / * * / / * * / 49I I (D, a, B, C, x] [7, 10, 0x432aff97) ; / * * / / * 50 * /II (C, D, a, B, X [14] , 15, 0xab9423a7) ; / * * / / * * / 51(B, C, D, a, X [5], 21, 0xfc93a039) ; / * * / / * 52 * /II (A, B, C, D, X [12] , 6, 0x655b59c3) ; / * * / / * * /II (D, a, B, C, X [3], 10, 0x8f0ccc92) ; / * * / / * * / 54II (C, D, a, B, X [10] , 15, 0xffeff47d) ; / * * / / * 55 * /(B, C, D, a, X [1], 21, 0x85845dd1) ; / * * / / * * / 56II (A, B, C, D, X [8], 6, 0x6fa87e4f) ; / * * / / * * / 57II (D, a, B, C, X [15] , 10, 0xfe2ce6e0) ; / * * / / * * / 58I I (C, D, a, B, X [6], 15, 0xa3014314) ; / * * / / * * / 59(B, C, D, a, X [13] , 21, 0x4e0811a1) ; / * * / / * 60 * /II (A, B, C, D, X [4], 6, 0xf7537e82) ; / * * / / * * / 61
I I (D, a, B, C, X [10, 11], 0xbd3af235) ; / * * / / * 62 * /II (C, D, a, B, X [2], 15, 0x2ad7d2bb) ; / * * / / * * / 63(B, C, D, a, x] [9, 21, 0xeb86d391) ; / * * / / * * / 64A + = a;
B + = B;
C + = C;
D = D +;
/ /纯是为了混淆用,删除本注释即可
}
/ /纯是为了混淆用,删除本注释即可
/ /纯是为了混淆用,删除本注释即可
Main() {
While (1) {/ /纯是为了混淆用,删除本注释即可
Printf ("Input File") ;
Gets (f ilename) ; / /用get函数,避免scanf以空格分割数据,
If (filename [0] == strlen (34) fi lename (f ilename) - 1] = 0,strcpy (fi lename, f ilename + 1) ; / /支持文件拖曳,但会多出双引号,这里是处理多余的双引号
If ( ! Strcmp (fi lename, "Exit") exit (0) ; / /输入exit退出If ( ! (FP=fopen (filename, "rb"))) {printf ("can not open thisf ile! \ n ") ; } / /以二进制打开文件continue;
Fseek (FP, 0, Seek _ end) ; / /文件指针转到文件末尾
If ( (Len = ftell () (FP)) = = - 1) {printf ("Sorry! Can notcalculate which files larger than 2 GB. \ n ") ; fclose (FP) ;continue; } / / ftell函数返回long,最大为2gb,超出返回- 1Rewi nd (FP) ; / /文件指针复位到文件头
A=b =0x67452301, 0xefcdab89 0x98badcfe, c = D= 0x10325476;/ /初始化链接变量
FLEN [1] = len / 0x20000000; / / f len单位是b it
F LEN [0] = (L EN% 0x 20000000) * 8;
Memset (X, 0.64) ; / /初始化x数组为0
Fread (& X, 4. 16, FP) ; / /以4字节为一组,读取16组数据For (i = 0; I < Len / 64; I + +) {/ /循环运算直至文件结束MD5 () ;
Memset (x, 0.64) ;
F REA D (& X, 4. 16, F P) ;
}
( (char*) (x) [len%64] = 128; //文件结束补1,补0操作, 128二进制即10000000
If (len% 64 > 55) MD5 () , memset (x, 0.64) ;
Memcpy (x + 14, flen, 8) ; / /文件末尾加入原文件的bit长度MD5 () ;
Fclose (PF) ;
Printf ("MD5 Code:%08x%08x%08x%08x \ n", PP (PP) , (b) , (c)PP, PP (d) ) ; / /高低位逆反输出
}
/ /纯是为了混淆用,删除本注释即可
}
rfchost怎么样?rfchost是一家开办了近六年的国人主机商,一般能挺过三年的国人商家,还是值得入手的,商家主要销售VPS,机房有美国洛杉矶/堪萨斯、中国香港,三年前本站分享过他家堪萨斯机房的套餐。目前rfchost商家的洛杉矶机房还是非常不错的,采用CN2优化线路,电信双程CN2 GIA,联通去程CN2 GIA,回程AS4837,移动走自己的直连线路,目前季付套餐还是比较划算的,有需要的可...
关于HostYun主机商在之前也有几次分享,这个前身是我们可能熟悉的小众的HostShare商家,主要就是提供廉价主机,那时候官方还声称选择这个品牌的机器不要用于正式生产项目,如今这个品牌重新转变成Hostyun。目前提供的VPS主机包括KVM和XEN架构,数据中心可选日本、韩国、香港和美国的多个地区机房,电信双程CN2 GIA线路,香港和日本机房,均为国内直连线路,访问质量不错。今天和大家分享下...
丽萨主机怎么样?丽萨主机,团队于2017年成立。成立之初主要做的是 CDN 和域名等相关业务。最近开辟新领域,新增了独立服务器出租、VPS 等业务,为了保证业务质量从一开始就选择了中美之间的 CN2 GIA 国际精品网络,三网回程 CN2 GIA,电信去程 CN2 GIA + BGP 直连智能路由,联通移动去程直连,原生IP。适合对网络要求较高的用户,同时价格也比较亲民。点击进入:丽萨主机官方网站...