XOOPS RMCommon Utilities  2.1.8.91RC
 All Classes Namespaces Files Functions Variables
crypt.php
Go to the documentation of this file.
1 <?php
2 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
3 
4 // {{{ Crypt
5 
22 class Crypt {
23 
24  // {{{ Constants
25 
26  /* Returning modes */
27  const MODE_BIN = 0; // same length of the original data
28  const MODE_B64 = 1; // about 66% bigger
29  const MODE_HEX = 2; // exactly 100% bigger
30 
31  // }}}
32  // {{{ Attributes
33 
42  private $_key = __CLASS__;
43 
53 
54  // }}}
55  // {{{ function __construct()
56 
66  function __construct($mode = null, $key = null) {
67  is_null($mode) || ($this->Mode = $mode);
68  is_null($key) || ($this->Key = $key);
69  }
70 
71  // }}}
72  // {{{ function __toString()
73 
82  function __toString() {
83  return __CLASS__ . " object\n"
84  . "(\n"
85  . " [Key] => {$this->_key}\n"
86  . " [Mode] => {$this->_mode}\n"
87  . ")\n";
88  }
89 
90  // }}}
91  // {{{ function __set()
92 
101  function __set($property, $value) {
102  switch ($property) {
103  case 'Key' : return $this->_setKey($value);
104  case 'Mode': return $this->_setMode($value);
105  }
106  }
107 
108  // }}}
109  // {{{ function __get()
110 
118  function __get($property) {
119  switch ($property) {
120  case 'Key' : return $this->_key;
121  case 'Mode': return $this->_mode;
122  }
123  }
124 
125  // }}}
126  // {{{ public function encrypt()
127 
136  public function encrypt($data) {
137  $data = (string) $data;
138  for ($i=0;$i<strlen($data);$i++)
139  @$encrypt .= $data[$i] ^
140  $this->_key[$i % strlen($this->_key)];
141  if ($this->_mode === Crypt::MODE_B64)
142  return base64_encode(@$encrypt);
143  if ($this->_mode === Crypt::MODE_HEX)
144  return $this->_encodeHexadecimal(@$encrypt);
145  return @$encrypt;
146  }
147 
148  // }}}
149  // {{{ public function decrypt()
150 
160  public function decrypt($crypt) {
161  if ($this->_mode === Crypt::MODE_HEX)
162  $crypt = $this->_decodeHexadecimal($crypt);
163  if ($this->_mode === Crypt::MODE_B64)
164  $crypt = (string)base64_decode($crypt);
165  for ($i=0;$i<strlen($crypt);$i++)
166  @$data .= $crypt[$i] ^ $this->_key[$i % strlen($this->_key)];
167  return @$data;
168  }
169 
170  // }}}
171  // {{{ public static function supportedModes()
172 
181  public static function supportedModes() {
182  return array(
186  );
187  }
188 
189  // }}}
190  // {{{ protected static function _isSupportedMode()
191 
200  public static function _isSupportedMode($mode) {
201  return in_array($mode, Crypt::supportedModes());
202  }
203 
204  // }}}
205  // {{{ protected function _setKey()
206 
215  protected function _setKey($key) {
216  $this->_key = (string) $key;
217  }
218 
219  // }}}
220  // {{{ protected function _setMode()
221 
230  protected function _setMode($mode) {
232  && ($this->_mode = (int)$mode);
233  }
234 
235  // }}}
236  // {{{ protected function _encodeHexadecimal()
237 
246  protected function _encodeHexadecimal($data) {
247  $data = (string) $data;
248  for ($i=0;$i<strlen($data);$i++)
249  @$hexcrypt .= str_pad(dechex(ord(
250  $data[$i])), 2, 0, STR_PAD_LEFT);
251  return @$hexcrypt;
252  }
253 
254  // }}}
255  // {{{ protected function _decodeHexadecimal()
256 
265  protected function _decodeHexadecimal($hexcrypt) {
266  $hexcrypt = (string) $hexcrypt;
267  for ($i=0;$i<strlen($hexcrypt);$i+=2)
268  @$data .= chr(hexdec(substr($hexcrypt, $i, 2)));
269  return @$data;
270  }
271 
272  // }}}
273 
274 }
275 
276 // }}}
277 ?>