XOR算法的原理和實(shí)現(xiàn)

XOR算法這種方法的原理是:當(dāng)一個(gè)數(shù)A和另一個(gè)數(shù)B進(jìn)行異或運(yùn)算會(huì)生成另一個(gè)數(shù)C,如果再將C和B進(jìn)行異或運(yùn)算則C又會(huì)還原為A。

相對(duì)于其他的簡(jiǎn)易加密算法,XOR算法的優(yōu)點(diǎn)如下。

(1)算法簡(jiǎn)單,對(duì)于高級(jí)語言很容易能實(shí)現(xiàn)。

(2)速度快,可以在任何時(shí)候、任何地方使用。

(3)對(duì)任何字符都是有效的,不像有些簡(jiǎn)易加密算法,只對(duì)西文字符有效,對(duì)中文加密后再解密無法還原為原來的字符。

XOR算法實(shí)現(xiàn)

上一部分介紹了如何使用XOR運(yùn)算進(jìn)行加密/解密的原理,本節(jié)將使用其加密用戶的登錄信息。根據(jù)上一小節(jié)介紹的XOR加密算法的原理,不難寫出以下的加密解密函數(shù)。首先列出加密算法。

XOR算法的原理和實(shí)現(xiàn)

第4行定義了加密函數(shù)myEncrypt(),輸入?yún)?shù)$string為明文,而$key為密鑰;輸出為使用$key作為密鑰并使用XOR加密算法產(chǎn)生的密文。

第6~12行的外層for循環(huán)對(duì)明文字符串的每一個(gè)字符進(jìn)行循環(huán),而內(nèi)層的for循環(huán)(第8~11行)對(duì)明文的每一字符循環(huán)與密鑰的每一位做異或運(yùn)算。其原理已經(jīng)在上一小節(jié)中介紹,不再重述。

同樣,與加密函數(shù)類似,可以寫出下面的解密函數(shù)。

XOR算法的原理和實(shí)現(xiàn)

第4行定義了解密函數(shù)myDecrypt(),輸入?yún)?shù)$string為密文,而$key為密鑰;輸出為使用$key作為密鑰并使用XOR解密算法產(chǎn)生的明文。

下面,通過一個(gè)應(yīng)用示例來進(jìn)一步說明加密函數(shù)的功能。

XOR算法的原理和實(shí)現(xiàn)

第3行首先定義了一個(gè)明文$my_password,然后在第4行定義密鑰$my_key。

第5、6行分別調(diào)用加密函數(shù)生成密文并輸出;反過來,又在第7、8行將密文解密。

上面示例的運(yùn)行結(jié)果如下。

my_password=chair

my_password_en=RYPXC

my_password_de=chair

在用戶注冊(cè)時(shí),用戶需要添寫用戶密碼表單。

除用戶本人之外,其他任何人都無法獲取其密碼信息,包括系統(tǒng)設(shè)計(jì)者和數(shù)據(jù)庫管理員。

系統(tǒng)能根據(jù)用戶輸入的密碼驗(yàn)證用戶的合法性。