双向的加密与解密Crypt类

<?php
class Crypt{ 

	protected $key = "";

	private function keyED($txt,$encrypt_key) 
	{ 
		$encrypt_key = md5($encrypt_key); 
		$ctr=0; 
		$tmp = ""; 
		for ($i=0;$i<strlen($txt);$i++) 
		{ 
			if ($ctr==strlen($encrypt_key)){ 
				$ctr=0; 
			} 
			$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1); 
			$ctr++; 
		} 
		return $tmp; 
	} 

	public function encrypt($txt,$key="") 
	{ 
		if(empty($key)){ 
			$key = $this->key; 
		} 
	
		srand((double)microtime()*1000000); 
		$encrypt_key = md5(rand(0,32000)); 
		$ctr = 0; 
		$tmp = "";
		
		for ($i=0;$i<strlen($txt);$i++) 
		{ 
			if ($ctr==strlen($encrypt_key)){ 
				$ctr=0; 
			}
			$tmp.= substr($encrypt_key,$ctr,1) . 
			(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1)); 
			$ctr++;
		} 
		return $this->keyED($tmp,$key); 
	} 

	public function decrypt($txt,$key="") 
	{ 
		if(empty($key)){ 
			$key=$this->key; 
		}
		
		$txt = $this->keyED($txt,$key); 
		$tmp = ""; 
		for ($i=0;$i<strlen($txt);$i++) 
		{ 
			$md5 = substr($txt,$i,1); 
			$i++; 
			$tmp.= (substr($txt,$i,1) ^ $md5); 
		} 
		return $tmp; 
	} 

	public function setKey($key) 
	{ 
		if(empty($key)){ 
			return null; 
		} 
		$this->key=$key;
	} 

	public function getKey() 
	{ 
		return $this->key;
	} 
}
	
$string = '中文测试ABC12345678'; 
$crypt= new Crypt(); 
$crypt->setKey('123456789012345678901234567890123456'); 
$enc_text = $crypt->encrypt($string,$crypt->getKey());
$dec_text = $crypt->decrypt($enc_text,$crypt->getKey());
echo "加密前 : " . $string . "<br/>"; 
echo "加密后 : " . $enc_text . "<br/>"; 
echo "解密后 : " . $dec_text . "<br/>";
?> 


你可能感兴趣的:(加密,解密,crypt)