Linux中国 | Linux.cn - 我们的Linux中文社区

 找回密码
 加入

QQ登录

QQ登录

搜索

RC4加密算法 php代码

热度 8已有 1759 次阅读2010-9-3 15:12 |个人分类:加密解密|关键词:算法 php google c语言 不可逆

      最近在做一个项目的时候,偶然想换加密算法的想法,现在大家都在用md5,但是这个算法是不可逆的。于是google了一些加密算法,最终发现了RC4加密算法。但是网上都是C语言版的代码,我就写了一个php版的RC4加密算法。

     下面是算法的一个介绍:

      RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。RC4起初是用于保护商业机密的。但是在1994年9月,它的算法被发布在互联网上,也就不再有什么商业机密了。RC4也被叫做ARC4(Alleged RC4——所谓的RC4),因为RSA从来就没有正式发布过这个算法。

 

<?php
class Encrypt{

 //公钥
 var $public_key = 'afggthhjdhrdh';
 
 /*
 功能说明:对明文或密文进行加密或解密。
 参数说明:
   $secret_str:明文或解密。
 */
 function encrypt_decrypt($secret_str)
 {
  $secret_key = $this->make_secret_key($this->public_key);
  $x = $secret_key['x'];
  $y = $secret_key['y'];
  $secret_number = '';
  $secret_str_len = strlen($secret_str);
  for($counter = 0; $counter < $secret_str_len; $counter++)
  {
   $x = ($x + 1) % 256;
   $y = ($secret_key['state'][$x] + $y) % 256;
   $xy = $this->xor_byte($secret_key['state'][$x], $secret_key['state'][$y]);
   $secret_key['state'][$x] = $xy['x'];
   $secret_key['state'][$y] = $xy['y'];
   $xorIndex = ($secret_key['state'][$x] + $secret_key['state'][$y]) % 256;
   $temp_str = ord($secret_str[$counter]) ^ $secret_key['state'][$xorIndex];
   $secret_number .= chr($temp_str);
  }
  return $secret_number;
 }
 
 /*
 功能说明:生成动态子密钥。
 参数说明:
 $public_key:公钥。
 */
 function make_secret_key($public_key)
 {
  $secret_key = array('x'=>0,'y'=>0,'state'=>array());
  for($counter = 0; $counter < 256; $counter++)
  {
   $secret_key['state'][$counter] = $counter;
  }
  $public_key_len = strlen($public_key);
  $secret_key['x'] = 0;
  $secret_key['y'] = 0;
  $index_x = 0;
  $index_y = 0;
  for($counter = 0; $counter < 256; $counter++)
  {
   $index_y = (ord($public_key[$index_x]) + $secret_key['state'][$counter] + $index_y) % 256;
   $xy = $this->xor_byte($secret_key['state'][$counter], $secret_key['state'][$index_y]);
   $secret_key['state'][$counter] = $xy['x'];
   $secret_key['state'][$index_y] = $xy['y'];
   $index_x = ($index_x + 1) % $public_key_len;
  }
  return $secret_key;
 }
 /*
 功能说明:进行异或运算。
 */
 function xor_byte($x,$y)
 {
  $x=$x^$y;
  $y=$x^$y;
  $x=$x^$y;
  return array('x'=>$x,'y'=>$y);
 }
}
?>

本文系kane原创,版权归kane及Linux中国所有,转贴请注明。

发表评论 评论 (2 个评论)

回复 wxy 2010-9-3 21:39
值得鼓励,很有实用性质。
不过最好在介绍下这个算法用于什么用途比较好。
回复 56480708 2010-11-6 10:56
同意

facelist

你需要登录后才可以评论 登录 | 加入

无觅相关文章插件