原文传送门:http://sfsrealm.hopto.org/inside_mopaq/chapter2.htm#hashes算法
安保系统的需求亘古有之,人们试图保护隐私的需求已经有数千年的历史,古希腊用脚携带手写信件,二战的无线电传输,如今经过网络信用卡信息。
网络
这门复杂的艺术叫作加密,咱们不知道第一个加密算法是何时被发明出来的,但咱们知道已有的加密算法数不胜数,从简单的掩码,到加密key和解密key都不同,技术已经进步不少。ide
下面是Basic Lab Notes公布的一个简单加密算法。加密
void EncryptBlock(void *lpvBlock, int nBlockLen, char *lpszPassword) |
||
int nPWLen = strlen(lpszPassword), nCount = 0; |
||
char cPW = lpsPassBuff[nCount]; |
||
} |
||
} |
这个程序很简单,不该当运用在商用程序中,在openssl中能够找到大量成熟的加密算法做为借鉴或者直接使用。
spa
想要和MPQs格式打交道就必须了解加密算法,MPQs的加密技术是其余加密技术的有趣融合,它建立了一个加密表,并使用文件加密key从表中找出特定的成员,将要加密的数据和加密表成员异或,下面的代码生成加密表。code
void prepareCryptTable() |
|||
unsigned long seed = 0x00100001, index1 = 0, index2 = 0, i; |
|||
for(index2 = index1, i = 0; i < 5; i++, index2 += 0x100) |
|||
unsigned long temp1, temp2; |
|||
} |
|||
} |
|||
} |
在加密表生成之后经过下面的代码对数据进行加密orm
void DecryptBlock(void *block, long length, unsigned long key) |
||
unsigned long seed = 0xEEEEEEEE, unsigned long ch; |
||
seed += stormBuffer[0x400 + (key & 0xFF)]; |
||
} |
||
} |