<?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,1) . (substr($txt,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,1); $i++; $tmp.= (substr($txt,1) ^ $md5); } return $tmp; }
public function setKey($key) { if(empty($key)){ return null; } $this->key=$key; }
public function getKey() { return $this->key; } // Downloads By http://www.veryhuo.com } $string = “http://www.52blogger.com”; $crypt= new Crypt(); $crypt->setKey(“http://www.52blogger.com”); $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 ”; ?>
执行结果:
加密前 : http://www.52blogger.com 加密后 : hSzQ’Z* kP~y(WpVs=6Q3gZbR5QkhtZ(f=Zm 解密后 : http://www.52blogger.com
注意的是:每次加密后的字符串都不一样,另外还需要公钥才能解密,如果公钥不对,解密的结果与明文是不一致的.可惜的是,此方法貌似不支持中文~ (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|