php 3des解密

class DesCrypt{
	
  var $key = 'kuaipay_des';
  var $deviceid = '';
  var $user = '';
  var $lsh = '';
  var $cipherText = '';
  var $HcipherText = '';
  var $decrypted_data ='';
  function DesCrypt(){

  }
  //加密
  function en($str)
  {
      $cipher = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
      $iv     = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_3DES,MCRYPT_MODE_ECB), MCRYPT_RAND);
      if (mcrypt_generic_init($cipher, substr($this->key,0,8), $iv) != -1)
      {
          $this->cipherText = mcrypt_generic($cipher,$this->pad($this->padding($str)));
          mcrypt_generic_deinit($cipher);
          // 以十六进制字符显示加密后的字符
          $this->HcipherText=bin2hex($this->cipherText);
      }
      mcrypt_module_close($cipher);
      return $this->HcipherText;
  }
  //解密
  function de($str)
  {
      $str    = pack('H*', $str);
      $cipher = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
      $iv     = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_3DES,MCRYPT_MODE_ECB), MCRYPT_RAND);
      if (mcrypt_generic_init($cipher, substr($this->key,0,8), $iv) != -1)
      {
          $this->decrypted_data = mdecrypt_generic($cipher,$str);
          mcrypt_generic_deinit($cipher);
      }
      mcrypt_module_close($cipher);
      return $this->unpad($this->decrypted_data);
  }
  private function pad ($data)
  {
      $data = str_replace("\n","",$data);
      $data = str_replace("\t","",$data);
      $data = str_replace("\r","",$data);
      return $data;
  }
  private function unpad ($text)
  {
      $pad = ord($text{strlen($text) - 1});
      if ($pad > strlen($text)) {
          return false;
      }
      if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
          return false;
      }
      return substr($text, 0, - 1 * $pad);
  }
     //填充密码,填充至8的倍数
    private function padding( $str )
    {
        $len = 8 - strlen( $str ) % 8;
        for ( $i = 0; $i < $len; $i++ )
        {
            $str .= 0;
        }
        return $str ;
    }
};

你可能感兴趣的:(PHP)