1、C+计算文件MD5值MD5ChecksumDefines.h1. /Magicinitializationconstants2. #defineMD5_INIT_STATE_00x674523013. #defineMD5_INIT_STATE_10xefcdab894. #defineMD5_INIT_STATE_20x98badcfe5. #defineMD5_INIT_STATE_30x103254766. 7. /ConstantsforTransformroutine.8. #defineMD5_S1179. #defineMD5_S121210. #defineMD5_S13171
2、1. #defineMD5_S142212. #defineMD5_S21513. #defineMD5_S22914. #defineMD5_S231415. #defineMD5_S242016. #defineMD5_S31417. #defineMD5_S321118. #defineMD5_S331619. #defineMD5_S342320. #defineMD5_S41621. #defineMD5_S421022. #defineMD5_S431523. #defineMD5_S442124. 25. /TransformationConstants-Round126. #d
3、efineMD5_T010xd76aa478/TransformationConstant127. #defineMD5_T020xe8c7b756/TransformationConstant228. #defineMD5_T030x242070db/TransformationConstant329. #defineMD5_T040xc1bdceee/TransformationConstant430. #defineMD5_T050xf57c0faf/TransformationConstant531. #defineMD5_T060x4787c62a/TransformationCon
4、stant632. #defineMD5_T070xa8304613/TransformationConstant733. #defineMD5_T080xfd469501/TransformationConstant834. #defineMD5_T090x698098d8/TransformationConstant935. #defineMD5_T100x8b44f7af/TransformationConstant1036. #defineMD5_T110xffff5bb1/TransformationConstant1137. #defineMD5_T120x895cd7be/Tra
5、nsformationConstant1238. #defineMD5_T130x6b901122/TransformationConstant1339. #defineMD5_T140xfd987193/TransformationConstant1440. #defineMD5_T150xa679438e/TransformationConstant1541. #defineMD5_T160x49b40821/TransformationConstant1642. 43. /TransformationConstants-Round244. #defineMD5_T170xf61e2562
6、/TransformationConstant1745. #defineMD5_T180xc040b340/TransformationConstant1846. #defineMD5_T190x265e5a51/TransformationConstant1947. #defineMD5_T200xe9b6c7aa/TransformationConstant2048. #defineMD5_T210xd62f105d/TransformationConstant2149. #defineMD5_T220x02441453/TransformationConstant2250. #defin
7、eMD5_T230xd8a1e681/TransformationConstant2351. #defineMD5_T240xe7d3fbc8/TransformationConstant2452. #defineMD5_T250x21e1cde6/TransformationConstant2553. #defineMD5_T260xc33707d6/TransformationConstant2654. #defineMD5_T270xf4d50d87/TransformationConstant2755. #defineMD5_T280x455a14ed/TransformationCo
8、nstant2856. #defineMD5_T290xa9e3e905/TransformationConstant2957. #defineMD5_T300xfcefa3f8/TransformationConstant3058. #defineMD5_T310x676f02d9/TransformationConstant3159. #defineMD5_T320x8d2a4c8a/TransformationConstant3260. 61. /TransformationConstants-Round362. #defineMD5_T330xfffa3942/Transformati
9、onConstant3363. #defineMD5_T340x8771f681/TransformationConstant3464. #defineMD5_T350x6d9d6122/TransformationConstant3565. #defineMD5_T360xfde5380c/TransformationConstant3666. #defineMD5_T370xa4beea44/TransformationConstant3767. #defineMD5_T380x4bdecfa9/TransformationConstant3868. #defineMD5_T390xf6b
10、b4b60/TransformationConstant3969. #defineMD5_T400xbebfbc70/TransformationConstant4070. #defineMD5_T410x289b7ec6/TransformationConstant4171. #defineMD5_T420xeaa127fa/TransformationConstant4272. #defineMD5_T430xd4ef3085/TransformationConstant4373. #defineMD5_T440x04881d05/TransformationConstant4474. #
11、defineMD5_T450xd9d4d039/TransformationConstant4575. #defineMD5_T460xe6db99e5/TransformationConstant4676. #defineMD5_T470x1fa27cf8/TransformationConstant4777. #defineMD5_T480xc4ac5665/TransformationConstant4878. 79. /TransformationConstants-Round480. #defineMD5_T490xf4292244/TransformationConstant498
12、1. #defineMD5_T500x432aff97/TransformationConstant5082. #defineMD5_T510xab9423a7/TransformationConstant5183. #defineMD5_T520xfc93a039/TransformationConstant5284. #defineMD5_T530x655b59c3/TransformationConstant5385. #defineMD5_T540x8f0ccc92/TransformationConstant5486. #defineMD5_T550xffeff47d/Transfo
13、rmationConstant5587. #defineMD5_T560x85845dd1/TransformationConstant5688. #defineMD5_T570x6fa87e4f/TransformationConstant5789. #defineMD5_T580xfe2ce6e0/TransformationConstant5890. #defineMD5_T590xa3014314/TransformationConstant5991. #defineMD5_T600x4e0811a1/TransformationConstant6092. #defineMD5_T61
14、0xf7537e82/TransformationConstant6193. #defineMD5_T620xbd3af235/TransformationConstant6294. #defineMD5_T630x2ad7d2bb/TransformationConstant6395. #defineMD5_T640xeb86d391/TransformationConstant6496. 97. 98. /Nulldata(exceptforfirstBYTE)usedtofinalisethechecksumcalculation99. staticunsignedcharPADDING
15、64=100. 0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0103. ;CMD5Checksum.hcppview plaincopy1. #if!defined(AFX_MD5CHECKSUM_H_2BC7928E_4C15_11D3_B2EE_A4A60E20D2C3_INCLUDED_)2. #defineAFX_MD5CHECKSUM_H_2BC7928
16、E_4C15_11D3_B2EE_A4A60E20D2C3_INCLUDED_3. 4. #if_MSC_VER10005. #pragmaonce6. #endif/_MSC_VER10007. /*8. 9. 10. */11. classCMD5Checksum12. 13. public:14. staticCStringGetMD5OfString(CStringstrString);15. /interfacefunctionsfortheRSAMD5calculation16. staticCStringGetMD5(constCString&strFilePath);17. 1
17、8. protected:19. /constructor/destructor20. CMD5Checksum();21. virtualCMD5Checksum();22. 23. /RSAMD5implementation24. voidTransform(BYTEBlock64);25. voidUpdate(BYTE*Input,ULONGnInputLen);26. CStringFinal();27. inlineDWORDRotateLeft(DWORDx,intn);28. inlinevoidFF(DWORD&A,DWORDB,DWORDC,DWORDD,DWORDX,DW
18、ORDS,DWORDT);29. inlinevoidGG(DWORD&A,DWORDB,DWORDC,DWORDD,DWORDX,DWORDS,DWORDT);30. inlinevoidHH(DWORD&A,DWORDB,DWORDC,DWORDD,DWORDX,DWORDS,DWORDT);31. inlinevoidII(DWORD&A,DWORDB,DWORDC,DWORDD,DWORDX,DWORDS,DWORDT);32. 33. /utilityfunctions34. inlinevoidDWordToByte(BYTE*Output,DWORD*Input,UINTnLen
19、gth);35. inlinevoidByteToDWord(DWORD*Output,BYTE*Input,UINTnLength);36. 37. private:38. BYTEm_lpszBuffer64;/inputbuffer39. ULONGm_nCount2;/numberofbits,modulo264(lsbfirst)40. ULONGm_lMD54;/MD5checksum41. ;42. 43. #endif/!defined(AFX_MD5CHECKSUM_H_2BC7928E_4C15_11D3_B2EE_A4A60E20D2C3_INCLUDED_)MD5Che
20、cksum.cppcppview plaincopy1. #includestdafx.h2. #includeMD5Checksum.h3. #includeMD5ChecksumDefines.h4. 5. #ifdef_DEBUG6. #undefTHIS_FILE7. staticcharTHIS_FILE=_FILE_;8. #definenewDEBUG_NEW9. #endif10. 11. 12. /*13. 14. */15. CStringCMD5Checksum:GetMD5(constCString&strFilePath)16. 17. try18. 19. CFil
21、efile;20. if(file.Open(strFilePath,CFile:modeRead)=0)21. return_T();22. 23. CMD5ChecksumMD5Checksum;/checksumobject24. intnLength=0;/numberofbytesreadfromthefile25. constintnBufferSize=1024;/checksumthefileinblocksof1024bytes26. BYTEBuffernBufferSize;/bufferfordatareadfromthefile27. 28. /checksumthe
22、fileinblocksof1024bytes29. while(nLength=file.Read(Buffer,nBufferSize)0)30. 31. MD5Checksum.Update(Buffer,nLength);32. 33. 34. file.Close();35. 36. /finalisethechecksumandreturnit37. returnMD5Checksum.Final();38. 39. 40. /reportanyfileexceptionsindebugmodeonly41. catch(CFileException*e)42. 43. TRACE
23、0(CMD5Checksum:GetMD5:CFileExceptioncaught);44. throwe;45. 46. 47. 48. /*49. FUNCTION:CMD5Checksum:RotateLeft50. DETAILS:private51. DESCRIPTION:Rotatesthebitsina32bitDWORDleftbyaspecifiedamount52. RETURNS:TherotatedDWORD53. ARGUMENTS:DWORDx:thevaluetoberotated54. intn:thenumberofbitstorotateby55. */
24、56. DWORDCMD5Checksum:RotateLeft(DWORDx,intn)57. 58. /checkthatDWORDis4byteslong-trueinVisualC+6and32bitWindows59. ASSERT(sizeof(x)=4);60. 61. /rotateandreturnx62. return(x(32-n);63. 64. 65. 66. /*67. FUNCTION:CMD5Checksum:FF68. DETAILS:protected69. DESCRIPTION:ImplementationofbasicMD5transformationalgorithm70. RETURNS:none71. ARGUMENTS:DWORD&A,B,C,D:Current(partia