异或(XOR)运算加密/解密算法

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

你可能感兴趣的:(异或(XOR)运算加密/解密算法)