本文将介绍一个简单易用的加密/解密算法:使用异或(XOR)运算。本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象。
XOR算法原理
从加密的主要方法看,换位法过于简单,特别是对于数据量少的情况很容易由密文猜出明文,而替换法不失为一种行之有效的简易算法。
从各种替换法运算的特点看,异或运算最适合用于简易加解密运算,这种方法的原理是:当一个数A和另一个数B进行异或运算会生成另一个数C,如果再将C和B进行异或运算则C又会还原为A。
相对于其他的简易加密算法,XOR算法的优点如下。
(1)算法简单,对于高级语言很容易能实现。
(2)速度快,可以在任何时候、任何地方使用。
(3)对任何字符都是有效的,不像有些简易加密算法,只对西文字符有效,对中文加密后再解密无法还原为原来的字符。
XOR算法实现
上一部分介绍了如何使用XOR运算进行加密/解密的原理,本节将使用其加密用户的登录信息。根据上一小节介绍的XOR加密算法的原理,不难写出以下的加密解密函数。首先列出加密算法。
1
2
3 //加密函数
4 function myEncrypt($string, $key)
5 {
6 for($i=0; $i
7 {
8 for($j=0; $j
9 {
10 $string[$i] = $string[$i]^$key[$j];
11 }
12 }
13 return $string;
14 }
第4行定义了加密函数myEncrypt(),输入参数$string为明文,而$key为密钥;输出为使用$key作为密钥并使用XOR加密算法产生的密文。
第6~12行的外层for循环对明文字符串的每一个字符进行循环,而内层的for循环(第8~11行)对明文的每一字符循环与密钥的每一位做异或运算。其原理已经在上一小节中介绍,不再重述。
同样,与加密函数类似,可以写出下面的解密函数。
1 //解密函数
2 function myDecrypt($string, $key)
3 {
4 for($i=0; $i
5 {
6 for($j=0; $j
7 {
8 $string[$i] = $key[$j]^$string[$i];
9 }
10 }
11 return $string;
#code.google.com/p/bjbk;
#code.google.com/p/bjck;
#code.google.com/p/bjmk;
#code.google.com/p/bjbz;
#code.google.com/p/bjcs;
#code.google.com/p/shdb;
#code.google.com/p/shcs;
#code.google.com/p/shda;
#code.google.com/p/shdai;
#code.google.com/p/shcsh;
#code.google.com/p/tjmc;
#code.google.com/p/tjms;
#code.google.com/p/tjys;
#code.google.com/p/tjma;
#code.google.com/p/tjmsd;
#code.google.com/p/cqms;
#code.google.com/p/cqma;
#code.google.com/p/cqmd;
#code.google.com/p/cqmf;
#code.google.com/p/cqmg;
#code.google.com/p/hebma;
#code.google.com/p/hebms;
#code.google.com/p/hebmd;
#code.google.com/p/hebmg;
#code.google.com/p/hebmq;
#code.google.com/p/jlma;
#code.google.com/p/jlmd;
#code.google.com/p/jlmf;
#code.google.com/p/jlcsa;
#code.google.com/p/jlcss;
#code.google.com/p/ccmts;
#code.google.com/p/ccmtd;
#code.google.com/p/ccmtf;
#code.google.com/p/ccmtg;
#code.google.com/p/ccmtw;
#code.google.com/p/symts;
#code.google.com/p/symtt;
#code.google.com/p/symty;
#code.google.com/p/symtz;
#code.google.com/p/symtx;
#code.google.com/p/dlmta;
#code.google.com/p/dlcs;
#code.google.com/p/dldba;
#code.google.com/p/dldbs;
#code.google.com/p/dlcsd;
#code.google.com/p/asmtw;
#code.google.com/p/asmte;
#code.google.com/p/asmtr;
#code.google.com/p/jnmtw;
#code.google.com/p/jnmte;
#code.google.com/p/jnmtr;
#code.google.com/p/jnmtt;
#code.google.com/p/jnmta;
#code.google.com/p/jnmts;
#code.google.com/p/qdmt;
#code.google.com/p/qdmtq;
#code.google.com/p/qdmtw;
#code.google.com/p/qdmte;
#code.google.com/p/qdmtr;
#code.google.com/p/qdmta;
#code.google.com/p/zbmtq;
#code.google.com/p/zbcs;
#code.google.com/p/dymte;
#code.google.com/p/dycs;
#code.google.com/p/dycsa;
#code.google.com/p/ytmtr;
#code.google.com/p/ytdg;
#code.google.com/p/ytcs;
#code.google.com/p/wfcs;
#code.google.com/p/wfmtq;
#code.google.com/p/tymtq;
#code.google.com/p/tymtw;
#code.google.com/p/tycs;
#code.google.com/p/tycsa;
#code.google.com/p/tycss;
#code.google.com/p/xamt;
#code.google.com/p/sayh;
#code.google.com/p/xadba;
#code.google.com/p/xadbd;
#code.google.com/p/xacsa;
#code.google.com/p/sjzcs;
#code.google.com/p/sjzcsa;
#code.google.com/p/sjzdg;
#code.google.com/p/sjzsb;
#code.google.com/p/sjzdbs;
#code.google.com/p/sjzbs;
#code.google.com/p/tssb;
#code.google.com/p/tsdba;
#code.google.com/p/tscss;
#code.google.com/p/qhdcs;
#code.google.com/p/qhddb;
#code.google.com/p/qhdcsa;
#code.google.com/p/lysbd;
#code.google.com/p/sycs;
#code.google.com/p/sydb;
#code.google.com/p/zzcs;
#code.google.com/p/zzdba;
#code.google.com/p/zzcsd;
#code.google.com/p/zzdbs;
#code.google.com/p/zzcsa;
#code.google.com/p/whcs;
#code.google.com/p/whcsa;
#code.google.com/p/whdb;
#code.google.com/p/whdba;
#code.google.com/p/whcss;
#code.google.com/p/cccsa;
#code.google.com/p/cccsd;
#code.google.com/p/csdba;
#code.google.com/p/csdbs;
#code.google.com/p/cscsa;
#code.google.com/p/wxcsa;
#code.google.com/p/wxcss;
#code.google.com/p/wxcsd;
#code.google.com/p/wxdb;
#code.google.com/p/wxcsf;
#code.google.com/p/njds;
#code.google.com/p/njcs;
#code.google.com/p/njcsa;
#code.google.com/p/njcss;
#code.google.com/p/njdb;
#code.google.com/p/szcsa;
#code.google.com/p/szcss;
#code.google.com/p/szcsd;
#code.google.com/p/szdb;
#code.google.com/p/szcsf;
#code.google.com/p/nbcs;
#code.google.com/p/dbcsa;
#code.google.com/p/nbdb;
#code.google.com/p/nbdbs;
#code.google.com/p/nbcsa;
#code.google.com/p/hzdb;
#code.google.com/p/hzdba;
#code.google.com/p/hzdbs;
#code.google.com/p/hzcs;
#code.google.com/p/hzcss;
#code.google.com/p/fzcs;
#code.google.com/p/fzcsa;
#code.google.com/p/fzdb;
#code.google.com/p/fwdb;
#code.google.com/p/fzcss;
#code.google.com/p/xmcs;
#code.google.com/p/xmdb;
#code.google.com/p/xmdba;
#code.google.com/p/xmdbs;
#code.google.com/p/xmcsa;
#code.google.com/p/kmcs;
#code.google.com/p/kmcsd;
#code.google.com/p/kmdb;
#code.google.com/p/kmdba;
#code.google.com/p/kmcsa;
#code.google.com/p/cdcsa;
#code.google.com/p/cscss;
#code.google.com/p/cdcss;
#code.google.com/p/cddb;
#code.google.com/p/cdcsd;
#code.google.com/p/hfcs;
#code.google.com/p/hfcsa;
#code.google.com/p/hfcss;
#code.google.com/p/hfdb;
#code.google.com/p/hfdba;
#code.google.com/p/gycs;
#code.google.com/p/gycsa;
#code.google.com/p/gycss;
#code.google.com/p/gydb;
#code.google.com/p/gydba;
#code.google.com/p/xzcs;
#code.google.com/p/xzdbs;
#code.google.com/p/xzdb;
#code.google.com/p/ntcs;
#code.google.com/p/ntcsa;
#code.google.com/p/ntcss;
#code.google.com/p/ntcsd;
#code.google.com/p/jhcsa;
#code.google.com/p/jhdb;
#code.google.com/p/jhcss;
#code.google.com/p/zjcs;
#code.google.com/p/zjdba;
#code.google.com/p/yzcsa;
#code.google.com/p/yzcss;
#code.google.com/p/yzdb;
#code.google.com/p/yzdba;
#code.google.com/p/nccs;
#code.google.com/p/nccsa;
#code.google.com/p/nccsd;
#code.google.com/p/ncdba;
#code.google.com/p/ncdbs;
#code.google.com/p/gzcs;
#code.google.com/p/gzdb;
#code.google.com/p/gzcsa;
#code.google.com/p/gzdba;
#code.google.com/p/gzdbs;
#code.google.com/p/szcsw;
#code.google.com/p/szcse;
#code.google.com/p/szdg;
#code.google.com/p/szdbs;
#code.google.com/p/szdbf;
#code.google.com/p/zscs;
#code.google.com/p/zsdb;
#code.google.com/p/zsdba;
#code.google.com/p/stcsa;
#code.google.com/p/stcss;
#code.google.com/p/stdba;
#code.google.com/p/fscsa;
#code.google.com/p/fsdb;
#code.google.com/p/fwcsd;
#code.google.com/p/wsdb;
#code.google.com/p/lzcsa;
#code.google.com/p/lzcss;
#code.google.com/p/lzdba;
#code.google.com/p/lzcsd;
#code.google.com/p/lzcsf;
#code.google.com/p/zhcs;
#code.google.com/p/zhcsa;
#code.google.com/p/zhdb;
#code.google.com/p/hzcsf;
#code.google.com/p/hzdbd;
12 }
13 ?>
第4行定义了解密函数myDecrypt (),输入参数$string为密文,而$key为密钥;输出为使用$key作为密钥并使用XOR解密算法产生的明文。
下面,通过一个应用示例来进一步说明加密函数的功能。
1 //示例
2 $my_passWord="chair";
3 echo "my_password = $my_password";
4 $my_key="1234567890";
5 $my_password_en=myEncrypt($my_password,$my_key);
6 echo "my_password_en = $my_password_en";
7 $my_password_de=myDecrypt($my_password_en,$my_key);
8 echo "my_password_de = $my_password_de";
第3行首先定义了一个明文$my_password,然后在第4行定义密钥$my_key。
第5、6行分别调用加密函数生成密文并输出;反过来,又在第7、8行将密文解密。