MD5例子及其用途

下载

/* MD5.H - header file for MD5C.C
* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
* rights reserved.

共有三个文件MD5.h, MD5c.c, global.h

 1 #include "global.h"
2
3 extern "C"
4 {
5 #include "MD5.h"
6 };
7
8 #include <string>
9
10 int main()
11 {
12 MD5_CTX message;
13 std::string s = "";
14 unsigned char *data = (unsigned char*)s.c_str();
15 unsigned char md[16];
16 char buf[33] = {'\0'};
17 char tmp[33] = {'\0'};
18 int i;
19
20 // 初始化MD5_CTX结构
21 MD5Init(&message);
22 // @message — MD5_CTX结构
23 // @data — 输入数据
24 // @16 — 输入数据的大小字节数
25 MD5Update(&message, data, 16);
26 // @md — 存储md5数据的字符数组
27 // @message — MD5_CTX结构
28 MD5Final(md, &message);
29
30 for(i=0; i<16; i++)
31 {
32 sprintf(tmp, "%02X", md[i]);
33 strcat(buf,tmp);
34 }
35 std::cout<<buf;
36 return 0;
37 }

MD5用在游戏打包时,将所有的模型,纹理贴图,地图。。等数据打包成.sqp文件后,对比打包后的数据源文件的MD5值,若相同的话则打包成功,可以删掉源文件以节省存储空间。

打包后文件的数据可以直接通过sfmpq的api根据文件名打开;源文件的话通过内存映射文件打开,分别计算其MD5值即可。

游戏加载数据的时候若存在.spq文件则从其读取,后则从本地源文件读取。。。

原文地址:https://www.cnblogs.com/kex1n/p/2311757.html