双向的加密与解密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/>";
?>


转载于:https://my.oschina.net/Jacker/blog/32837

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值