原文傳送門: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)]; |
||
} |
||
} |