Source for file jCrypt.class.php

Documentation is available at jCrypt.class.php

  1. <?php
  2.  
  3. /**
  4. @package     jelix
  5. @subpackage  utils
  6. @author      Antoine Detante
  7. @contributor
  8. @copyright   2007 Antoine Detante
  9. @link        http://www.jelix.org
  10. @licence     GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
  11. ***/
  12.  
  13. /** 
  14. * Static methods help to encrypt and decrypt string. mCrypt is used if it is installed, else a basic algorithm is used.
  15. @package     jelix
  16. @subpackage  utils
  17. */
  18. class jCrypt {
  19.  
  20.     /**
  21.      * Decrypt a string with a specific key
  22.      * @param string $string the string to decrypt
  23.      * @param string $key the key used to decrypt
  24.      * @return string decrypted string
  25.      */
  26.     public static function decrypt($string,$key){
  27.         $decrypted=null;
  28.         $decodedString=base64_decode($string);
  29.         // Check if mcrypt is installed, and if WAKE algo exists
  30.         if(function_exists("mcrypt_generic")&&mcrypt_module_self_test(MCRYPT_WAKE))
  31.             $decrypted=jCrypt::mcryptDecrypt($decodedString,$key);
  32.         else
  33.             $decrypted=jCrypt::simpleCrypt($decodedString,$key);
  34.         return $decrypted;
  35.     }
  36.  
  37.     /**
  38.      * Encrypt a string with a specific key
  39.      * @param string $string the string to encrypt
  40.      * @param string $key the key used to encrypt
  41.      * @return string encrypted string
  42.      */
  43.     public static function encrypt($string,$key){
  44.         $encrypted=null;
  45.         // Check if mcrypt is installed, and if WAKE algo exists
  46.         if(function_exists("mcrypt_generic")&&mcrypt_module_self_test(MCRYPT_WAKE))
  47.             $encrypted=jCrypt::mcryptEncrypt($string,$key);
  48.         else
  49.             $encrypted=jCrypt::simpleCrypt($string,$key);
  50.         return base64_encode($encrypted);
  51.     }
  52.  
  53.     /**
  54.      * Encrypt a string with mCrypt.
  55.      * @param string $string the string to encrypt
  56.      * @param string $key the key used to encrypt string
  57.      * @return string encrypted string
  58.      */
  59.     protected static function mcryptEncrypt($string,$key){
  60.         if($key=='')
  61.             throw new jException('jelix~auth.error.key.empty');
  62.         if (strlen($key)<15)
  63.             throw new jException('jelix~auth.error.key.tooshort',15);
  64.         $td mcrypt_module_open(MCRYPT_WAKE''MCRYPT_MODE_STREAM'');
  65.         $ks mcrypt_enc_get_key_size($td);
  66.         $key substr($key0$ks);
  67.         mcrypt_generic_init($td$keynull);
  68.         $encrypted mcrypt_generic($td$string);
  69.         mcrypt_generic_deinit($td);
  70.         mcrypt_module_close($td);
  71.         return $encrypted;
  72.     }
  73.  
  74.     /**
  75.      * Decrypt a string with mCrypt.
  76.      * @param string $string the string to decrypt
  77.      * @param string $key the key used to decrypt string
  78.      * @return string decrypted string
  79.      */
  80.     protected static function mcryptDecrypt($string,$key){
  81.         if($key=='')
  82.             throw new jException('jelix~auth.error.key.empty');
  83.         $td mcrypt_module_open(MCRYPT_WAKE''MCRYPT_MODE_STREAM'');
  84.         $ks mcrypt_enc_get_key_size($td);
  85.         $key substr($key0$ks);
  86.         mcrypt_generic_init($td$keynull);
  87.         $decrypted mdecrypt_generic($td$string);
  88.         mcrypt_generic_deinit($td);
  89.         mcrypt_module_close($td);
  90.         return $decrypted;
  91.     }
  92.  
  93.     /**
  94.      * Basic encrypt/decrypt algorithm.
  95.      * @author halojoy
  96.      * @see http://www.phpbuilder.com/board/showthread.php?t=10326721
  97.      * @param string $str the string to encrypt/decrypt
  98.      * @param string $key the key used to encrypt/decrypt string (must be >= 8 characters)
  99.      * @return string encrypted/decrypted string
  100.      */
  101.     protected static function simpleCrypt($str,$key){
  102.         if($key=='')
  103.             throw new jException('jelix~auth.error.key.empty');
  104.         $key=str_replace(chr(32),'',$key);
  105.         if(strlen($key)<8)
  106.             throw new jException('jelix~auth.error.key.tooshort',8);
  107.         $kl=strlen($key)<32?strlen($key):32;
  108.         $k=array();
  109.         for($i=0;$i<$kl;$i++){
  110.             $k[$i]=ord($key[$i])&0x1F;
  111.         }
  112.         $j=0;
  113.         for($i=0;$i<strlen($str);$i++){
  114.             $e=ord($str[$i]);
  115.             $str[$i]=$e&0xE0?chr($e^$k[$j]):chr($e);
  116.             $j++;$j=$j==$kl?0:$j;
  117.         }
  118.         return $str;
  119.     }
  120. }

Documentation generated on Thu, 22 Mar 2012 22:14:33 +0100 by phpDocumentor 1.4.3