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