一个简单基于密匙的加解密类

<?php<br/>/**<br/> * 一个简单基于密匙的加解密类<br/> * 启用了压缩可用于传输大量文本 <br/> * 配合数字签名可以完成较为安全的数据传输.<br/> */<br/>class myEncrypt<br/>{<br/>  const _privateKey = '_';<br/>  public $key; # 密匙<br/>  public $compressLevel; # 压缩级别 0 为不压缩<br/>  public function __construct($key = null,$compressLevel = 0)<br/>  {<br/>    $key = md5(self::_privateKey.$key);<br/>    $num = $this->getKeyNum($key);<br/>    $this->key = array(<br/>    'main' => $key,<br/>    'num' => $num,<br/>    );<br/>    settype($compressLevel,'integer');<br/>    $this->compressLevel = $compressLevel;<br/>  }<br/>  private function getKeyNum($key)<br/>  {<br/>    $keyReady = 0;<br/>    for ($i=0;$i<strlen($key);$i++)<br/>    {<br/>      $keyReady += ord($key[$i]);<br/>    }<br/>    $keyReady = self::_privateKey.$keyReady;<br/>    return $keyReady;<br/>  }<br/>  private function getDResult($content,$pKey)<br/>  {<br/>    $len = strlen($pKey);<br/>    $count = ceil(strlen($content)/$len);<br/>    $contentReady = array();<br/>    for ($i=0;$i<$count;$i++)<br/>    {<br/>      $start = $i*$len;<br/>      $current = substr($content,$start,$len);<br/>      $contentReady[$i] = ($current ^ $pKey);<br/>    }<br/>    $content = implode($contentReady);<br/>    return $content;<br/>  }<br/>  public function encrypt($content)<br/>  {<br/>    $key = $this->key['main'];<br/>    $num = $this->key['num'];<br/>    $content = base64_encode($content); # 这里使用base64是为了便于传输<br/>    $content = $this->getDResult($content,$key);<br/>    $content = $this->getDResult($content,$num);<br/>    if ($this->compressLevel)<br/>    {<br/>      $content = gzcompress($content,$this->compressLevel);<br/>    }<br/>    $content = base64_encode($content);<br/>    return $content;<br/>  }<br/>  public function decrypt($content)<br/>  {<br/>    $key = $this->key['main'];<br/>    $num = $this->key['num'];<br/>    $content = base64_decode($content);<br/>    if ($this->compressLevel)<br/>    {<br/>      $content = gzuncompress($content);<br/>    }<br/>    $content = $this->getDResult($content,$num);<br/>    $content = $this->getDResult($content,$key);<br/>    $content = base64_decode($content);<br/>    return $content;<br/>  }<br/>}<br/>$myEncrypt = new myEncrypt('MoX!',9);<br/>$zString = str_repeat('测试一下压缩~',20);<br/>$encode = $myEncrypt->encrypt('测试下中文~abcdefg haha~'.$zString);<br/>echo $encode."<br /> ";<br/>$myEncrypt = new myEncrypt('MoX!',true);<br/>echo $myEncrypt->decrypt($encode);<br/>?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值