问题描述:
希望把问题说详细点
解析:
bbs.cfan/attachment.p...tid=13858&stc=1
压缩包中有整个项目的源代码,其中用以编码的类MD5在单元文件SF_MD5.PAS中,MD5类的bmsj方法用以写入字符串数据,MD5bm属性用以返回MD5编码,注意MD5bm返斗冲回后会清空缓冲数据。参考以下调用代码:
var
m : MD5
s1,s2 : string
begin
m:=MD5.Create
m.bmsj('a')
s1:=m.MD5bm'a'返回0CC175B9C0F1B6A831C399E***********
s2:=m.MD5bm空数据返回D41D8CD98F00B204E9800998ECF8427E
end
使用bmsj时可空或歼以将数据分批写入。参考以下调用代码:
var
m : MD5
s : string
begin
m:=MD5.Create
m.bmsj('a')
m.bmsj('b')
m.bmsj('c')
s:=m.MD5bm'abc'返回***********CD24FB0D6963F7D28E17F72
end
这次对MD5类的bmsj过程进行了重载如下:使得bmsj可以对Delphi中的任意数据进行编码。
procedure bmsj(p : Pointern : Cardinal)overload编码数团雀据1
第一个参数是指向数据的指针,
第二个参数是数据的长度,以字节为单位。
单元文件SF_MD5.PAS中添加了WJMD5类,派生于线程TThread类,可以对文件进行编码,由于是线程所以在编码过程中可以暂停,中止编码。程序的外观进行了如下修改:以适用于文件编码。
(转载) #include <stdio.h> #include <stdlib.h> #include <memory.h> #include <time.h> #include <errno.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include "../md5/md5.h" #define T1 0xd76aa478 #define T2 0xe8c7b756 #define T3 0x242070db #define T4 0xc1bdceee #define T5 0xf57c0faf #define T6 0x4787c62a #define T7 0xa8304613 #define T8 0xfd469501 #define T9 0x698098d8 #define T10 0x8b44f7af #define T11 0xffff5bb1 #define T12 0x895cd7be #define T13 0x6b901122 #define T14 0xfd987193 #define T15 0xa679438e #define T16 0x49b40821 #define T17 0xf61e2562 #define T18 0xc040b340 #define T19 0x265e5a51 #define T20 0xe9b6c7aa #define T21 0xd62f105d #define T22 0x02441453 #define T23 0xd8a1e681 #define T24 0xe7d3fbc8 #define T25 0x21e1cde6 #define T26 0xc33707d6 #define T27 0xf4d50d87 #define T28 0x455a14ed #define T29 0xa9e3e905 #define T30 0xfcefa3f8 #define T31 0x676f02d9 #define T32 0x8d2a4c8a #define T33 0xfffa3942 #define T34 0x8771f681 #define T35 0x6d9d6122 #define T36 0xfde5380c #define T37 0xa4beea44 #define T38 0x4bdecfa9 #define T39 0xf6bb4b60 #define T40 0xbebfbc70 #define T41 0x289b7ec6 #define T42 0xeaa127fa #define T43 0xd4ef3085 #define T44 0x04881d05 #define T45 0xd9d4d039 #define T46 0xe6db99e5 #define T47 0x1fa27cf8 #define T48 0xc4ac5665 #define T49 0xf4292244 #define T50 0x432aff97 #define T51 0xab9423a7 #define T52 0xfc93a039 #define T53 0x655b59c3 #define T54 0x8f0ccc92 #define T55 0xffeff47d #define T56 0x85845dd1 #define T57 0x6fa87e4f #define T58 0xfe2ce6e0 #define T59 0xa3014314 #define T60 0x4e0811a1 #define T61 0xf7537e82 #define T62 0xbd3af235 #define T63 0x2ad7d2bb #define T64 0xeb86d391 static void md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/) { md5_word_t a = pms->abcd[0], b = pms->abcd[1], c = pms->abcd[2], d = pms->abcd[3] md5_word_t t #ifndef ARCH_IS_BIG_ENDIAN # define ARCH_IS_BIG_ENDIAN 1 /* slower, default implementation */ #endif #if ARCH_IS_BIG_ENDIAN /* * On big-endian machines, we must arrange the bytes in the right * order. (This also works on machines of unknown byte order.) */ md5_word_t X[16] const md5_byte_t *xp = data int i for (i = 0i <16i, xp = 4) X[i] = xp[0] (xp[1] <<8) (xp[2] <<16) (xp[3] <<24) #else /* !ARCH_IS_BIG_ENDIAN */ /* * On little-endian machines, we can process properly aligned data * without copying it. */ md5_word_t xbuf[16] const md5_word_t *X if (!((data - (const md5_byte_t *)0) &3)) { /* data are properly aligned */ X = (const md5_word_t *)data } else { /* not aligned */ memcpy(xbuf, data, 64) X = xbuf } #endif #define ROTATE_LEFT(x, n) (((x) <<(n)) | ((x) >>(32 - (n)))) /* Round 1. */ /* Let [abcd k s i] denote the operation a = b ((a F(b,c,d) X[k] T[i]) <<<s). */ #define F(x, y, z) (((x) &(y)) | (~(x) &(z))) #define SET(a, b, c, d, k, s, Ti)\ t = a F(b,c,d) X[k] Ti\ a = ROTATE_LEFT(t, s) b /* Do the following 16 operations. */ SET(a, b, c, d, 0, 7, T1) SET(d, a, b, c, 1, 12, T2) SET(c, d, a, b, 2, 17, T3) SET(b, c, d, a, 3, 22, T4) SET(a, b, c, d, 4, 7, T5) SET(d, a, b, c, 5, 12, T6) SET(c, d, a, b, 6, 17, T7) SET(b, c, d, a, 7, 22, T8) SET(a, b, c, d, 8, 7, T9) SET(d, a, b, c, 9, 12, T10) SET(c, d, a, b, 10, 17, T11) SET(b, c, d, a, 11, 22, T12) SET(a, b, c, d, 12, 7, T13) SET(d, a, b, c, 13, 12, T14) SET(c, d, a, b, 14, 17, T15) SET(b, c, d, a, 15, 22, T16) #undef SET /* Round 2. */ /* Let [abcd k s i] denote the operation a = b ((a G(b,c,d) X[k] T[i]) <<<s). */ #define G(x, y, z) (((x) &(z)) | ((y) &~(z))) #define SET(a, b, c, d, k, s, Ti)\ t = a G(b,c,d) X[k] Ti\ a = ROTATE_LEFT(t, s) b /* Do the following 16 operations. */ SET(a, b, c, d, 1, 5, T17) SET(d, a, b, c, 6, 9, T18) SET(c, d, a, b, 11, 14, T19) SET(b, c, d, a, 0, 20, T20) SET(a, b, c, d, 5, 5, T21) SET(d, a, b, c, 10, 9, T22) SET(c, d, a, b, 15, 14, T23) SET(b, c, d, a, 4, 20, T24) SET(a, b, c, d, 9, 5, T25) SET(d, a, b, c, 14, 9, T26) SET(c, d, a, b, 3, 14, T27) SET(b, c, d, a, 8, 20, T28) SET(a, b, c, d, 13, 5, T29) SET(d, a, b, c, 2, 9, T30) SET(c, d, a, b, 7, 14, T31) SET(b, c, d, a, 12, 20, T32) #undef SET欢迎分享,转载请注明来源:内存溢出
评论列表(0条)