//---------------------------------------------------------------------------
/************************************************************
MD5校验和计算小程序(C)
Author: rssn
Email : rssn@163.com
QQ : 126027268
Blog : http://blog.csdn.net/rssn_net/
************************************************************/
#pragma hdrstop
#include <stdio.h>
#include <string.h>
#include "uMd5c.h"
//---------------------------------------------------------------------------
#define UINT4 unsigned int
/* F, G, H and I are basic MD5 functions. */
#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)))
/* ROTATE_LEFT rotates x left n bits. */
#define ROTATE_LEFT(x, n) (((x) < (n)) | ((x) >> (32-(n))))
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation. */
#define FF(a, b, c, d, x, s, ac) {(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); }
#define GG(a, b, c, d, x, s, ac) {(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); }
#define HH(a, b, c, d, x, s, ac) {(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); }
#define II(a, b, c, d, x, s, ac) {(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); }
// Constants for MD5 Transform routine.
#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
//MD5摘要
MD5VAL md5(char * str, unsigned int size)
{
if(size==0)
size=strlen(str);
unsigned int m=size%64;
unsigned int lm=size-m; //数据整块长度
unsigned int ln; //数据补位后长度
if(m<56)
ln=lm+64;
else
ln=lm+128;
char * strw=new char[ln];
unsigned int i;
//复制原字串到缓冲区strw
for(i=0;i<size;i++)
strw[i]=str[i];
//补位
strw[i++]=0x80;
for(i;i<ln-8;i++)
strw[i]=0x00;
//补长度
unsigned int * x=(unsigned int *)(strw+i);
*(x++)=size<<3;
*(x++)=size>>29;
//初始化MD5参数
MD5VAL val={0x67452301,0xefcdab89,0x98badcfe,0x10325476};
unsigned int &a=val.a, &b=val.b, &c=val.c, &d=val.d;
unsigned int aa,bb,cc,dd;
for(i=0;i<ln;i+=64)
{
x=(unsigned int *)(strw+i);
// Save the values
aa=a; bb=b; cc=c; dd=d;
// Round 1
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
// Round 2
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
// Round 3
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
// Round 4 */
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
// Add the original values
a+=aa;
b+=bb;
c+=cc;
d+=dd;
}
delete[] strw;
return val;
}
#define BUFFER_SIZE 4096 //必须是64的倍数
static char * Buffer=NULL;
//MD5文件摘要
MD5VAL md5File(FILE * fpin)
{
if(!Buffer)
Buffer=new char[BUFFER_SIZE+64];
char * buf=Buffer;
MD5VAL val={0x67452301,0xefcdab89,0x98badcfe,0x10325476};
unsigned int &a=val.a, &b=val.b, &c=val.c, &d=val.d;
unsigned int aa,bb,cc,dd;
unsigned int i,j,count,co;
unsigned int * x;
i=0;
do
{
count=fread(buf,1,BUFFER_SIZE,fpin);
i+=count;
if(count==BUFFER_SIZE)
co=BUFFER_SIZE;
else
{
j=count;
buf[j++]=0x80;
for(j;j%64!=56;j++)
buf[j]=0x00;
*(unsigned int *)(buf+j)=i<<3; j+=4;
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
BCB网络文件传输客户端源码第二版 (119个子文件)
pFileClient.#00 3.82MB
back.bmp 7.32MB
pFileClient.cbproj 9KB
uMd5c.cpp 13KB
uMain.cpp 8KB
uSockComm.cpp 7KB
uFileDownThd.cpp 6KB
uUploadFileThed.cpp 5KB
uFileTranComm.cpp 4KB
pFileClient.cpp 876B
uMain.dfm 57KB
pFileClient.exe 139KB
uFileTranComm.h 5KB
uMain.h 2KB
uSockComm.h 2KB
uUploadFileThed.h 1KB
uFileDownThd.h 1KB
uMd5c.h 827B
pFileClient.ilc 576KB
pFileClient.ild 320KB
pFileClient.ilf 2.81MB
pFileClient.ils 7.06MB
back.jpg 85KB
fileNode.jpg 12KB
fileNode1.jpg 12KB
pFileClient.cbproj.local 1KB
pFileClient.map 246B
uSockComm.obj 641KB
uSockComm.obj 457KB
uUploadFileThed.obj 282KB
uFileDownThd.obj 269KB
uFileDownThd.obj 221KB
uFileTranComm.obj 169KB
uMain.obj 143KB
pFileClient.obj 24KB
uMd5c.obj 24KB
pFileClient.pch 16.53MB
pFileClient.res 5KB
pFileClient.tds 8.94MB
uFileDownThd.h.~11~ 848B
uFileDownThd.cpp.~124~ 6KB
uFileDownThd.cpp.~125~ 6KB
uFileDownThd.cpp.~126~ 6KB
uFileDownThd.cpp.~127~ 6KB
uFileDownThd.cpp.~128~ 6KB
uFileDownThd.cpp.~129~ 6KB
uFileDownThd.h.~12~ 820B
uFileDownThd.cpp.~130~ 6KB
uFileDownThd.cpp.~131~ 6KB
uFileDownThd.cpp.~132~ 6KB
uFileDownThd.cpp.~133~ 6KB
uFileDownThd.h.~13~ 853B
uFileDownThd.h.~14~ 852B
uFileDownThd.h.~15~ 853B
uFileDownThd.h.~16~ 862B
uUploadFileThed.cpp.~170~ 5KB
uUploadFileThed.cpp.~171~ 5KB
uUploadFileThed.cpp.~172~ 5KB
uUploadFileThed.cpp.~173~ 5KB
uUploadFileThed.cpp.~174~ 6KB
uUploadFileThed.cpp.~175~ 6KB
uUploadFileThed.cpp.~176~ 6KB
uUploadFileThed.cpp.~177~ 6KB
uUploadFileThed.cpp.~178~ 5KB
uUploadFileThed.cpp.~179~ 5KB
uFileDownThd.h.~17~ 820B
uFileDownThd.h.~18~ 1KB
uFileDownThd.h.~19~ 1KB
uSockComm.cpp.~1~ 7KB
uSockComm.h.~1~ 2KB
pFileClient.cpp.~1~ 876B
uUploadFileThed.h.~1~ 559B
uFileDownThd.h.~20~ 1KB
uMain.cpp.~210~ 8KB
uMain.cpp.~211~ 8KB
uMain.cpp.~212~ 8KB
uMain.cpp.~213~ 8KB
uMain.cpp.~214~ 8KB
uMain.cpp.~215~ 8KB
uMain.cpp.~216~ 8KB
uMain.cpp.~217~ 8KB
uMain.cpp.~218~ 8KB
uMain.cpp.~219~ 8KB
uSockComm.cpp.~2~ 7KB
uSockComm.h.~2~ 2KB
pFileClient.cpp.~2~ 876B
uUploadFileThed.h.~2~ 595B
uMain.h.~33~ 2KB
uMain.h.~34~ 2KB
uMain.h.~35~ 2KB
uMain.h.~36~ 2KB
uMain.h.~37~ 2KB
uMain.h.~38~ 2KB
uMain.h.~39~ 2KB
uSockComm.cpp.~3~ 7KB
uUploadFileThed.h.~3~ 627B
uMain.h.~40~ 2KB
uMain.h.~41~ 2KB
uMain.h.~42~ 2KB
uSockComm.cpp.~4~ 7KB
共 119 条
- 1
- 2
jackyhuangch
- 粉丝: 22
- 资源: 46
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页