本文将介绍一个简单易用的加密/解密算法:使用异或(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行将密文解密。