Source for file jCrypt.class.php

Documentation is available at jCrypt.class.php

  1. <?php
  2. /**
  3. @package     jelix
  4. @subpackage  utils
  5. @author      Antoine Detante
  6. @contributor Laurent Jouanneau
  7. @contributor Hadrien Lanneau <hadrien at over-blog dot com>
  8. @copyright   2007 Antoine Detante, 2009-2012 Laurent Jouanneau
  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
  15. * installed, else a basic algorithm is used.
  16. @package     jelix
  17. @subpackage  utils
  18. */
  19. class jCrypt {
  20.  
  21.     /**
  22.      * Decrypt a string with a specific key.
  23.      *
  24.      * Use mCrypt if it is installed, else a basic algorithm.
  25.      * @param string $string the string to decrypt
  26.      * @param string $key the key used to decrypt. If not given, use the key indicated in the configuration
  27.      * @return string decrypted string
  28.      */
  29.     public static function decrypt($string,$key=''){
  30.         $decrypted=null;
  31.         $decodedString=base64_decode($string);
  32.         // Check if mcrypt is installed, and if WAKE algo exists
  33.         if(function_exists("mcrypt_generic")&&mcrypt_module_self_test(MCRYPT_WAKE))
  34.             $decrypted=jCrypt::mcryptDecrypt($decodedString,$key);
  35.         else
  36.             $decrypted=jCrypt::simpleCrypt($decodedString,$key);
  37.         return $decrypted;
  38.     }
  39.  
  40.     /**
  41.      * Encrypt a string with a specific key
  42.      *
  43.      * Use mCrypt if it is installed, else a basic algorithm.
  44.      * @param string $string the string to encrypt
  45.      * @param string $key the key used to encrypt. If not given, use the key indicated in the configuration
  46.      * @return string encrypted string
  47.      */
  48.     public static function encrypt($string,$key=''){
  49.         $encrypted=null;
  50.         // Check if mcrypt is installed, and if WAKE algo exists
  51.         if(function_exists("mcrypt_generic")&&mcrypt_module_self_test(MCRYPT_WAKE))
  52.             $encrypted=jCrypt::mcryptEncrypt($string,$key);
  53.         else
  54.             $encrypted=jCrypt::simpleCrypt($string,$key);
  55.         return base64_encode($encrypted);
  56.     }
  57.  
  58.     /**
  59.      * Encrypt a string with mCrypt.
  60.      * @param string $string the string to encrypt
  61.      * @param string $key the key used to encrypt string. If not given, use
  62.      *       the key indicated in the configuration
  63.      * @return string encrypted string
  64.      */
  65.     public static function mcryptEncrypt($string$key=''{
  66.         if ($key=='')
  67.             throw new jException('jelix~auth.error.key.empty');
  68.         if (strlen($key)<15)
  69.             throw new jException('jelix~auth.error.key.tooshort',15);
  70.         $td mcrypt_module_open(MCRYPT_WAKE''MCRYPT_MODE_STREAM'');
  71.         $ks mcrypt_enc_get_key_size($td);
  72.         $key substr($key0$ks);
  73.         mcrypt_generic_init($td$keynull);
  74.         $encrypted mcrypt_generic($td$string);
  75.         mcrypt_generic_deinit($td);
  76.         mcrypt_module_close($td);
  77.         return $encrypted;
  78.     }
  79.  
  80.     /**
  81.      * Decrypt a string with mCrypt.
  82.      * @param string $string the string to decrypt
  83.      * @param string $key the key used to decrypt string. If not given, use
  84.      *  the key indicated in the configuration
  85.      * @return string decrypted string
  86.      */
  87.     public static function mcryptDecrypt($string,$key=''){
  88.         if($key=='')
  89.             throw new jException('jelix~auth.error.key.empty');
  90.         $td mcrypt_module_open(MCRYPT_WAKE''MCRYPT_MODE_STREAM'');
  91.         $ks mcrypt_enc_get_key_size($td);
  92.         $key substr($key0$ks);
  93.         mcrypt_generic_init($td$keynull);
  94.         $decrypted mdecrypt_generic($td$string);
  95.         mcrypt_generic_deinit($td);
  96.         mcrypt_module_close($td);
  97.         return $decrypted;
  98.     }
  99.  
  100.     /**
  101.      * Basic encrypt/decrypt algorithm.
  102.      * @author halojoy
  103.      * @see http://www.phpbuilder.com/board/showthread.php?t=10326721
  104.      * @param string $str the string to encrypt/decrypt
  105.      * @param string $key the key used to encrypt/decrypt string (must be >= 8 characters).
  106.      *  If not given, use the key indicated in the configuration
  107.      * @return string encrypted/decrypted string
  108.      */
  109.     protected static function simpleCrypt($str,$key=''){
  110.         if($key=='')
  111.             throw new jException('jelix~auth.error.key.empty');
  112.         $key=str_replace(chr(32),'',$key);
  113.         if(strlen($key)<8)
  114.             throw new jException('jelix~auth.error.key.tooshort',8);
  115.         $kl=strlen($key)<32?strlen($key):32;
  116.         $k=array();
  117.         for($i=0;$i<$kl;$i++){
  118.             $k[$i]=ord($key[$i])&0x1F;
  119.         }
  120.         $j=0;
  121.         for($i=0;$i<strlen($str);$i++){
  122.             $e=ord($str[$i]);
  123.             $str[$i]=$e&0xE0?chr($e^$k[$j]):chr($e);
  124.             $j++;$j=$j==$kl?0:$j;
  125.         }
  126.         return $str;
  127.     }
  128.  
  129.     /**
  130.      * Get default key in config
  131.      *
  132.      * @return string 
  133.      * @author Hadrien Lanneau <hadrien at over-blog dot com>
  134.      ***/
  135.     private static function _getDefaultKey({
  136.         $conf jApp::config()->jcrypt;
  137.         if (isset($conf['defaultkey']&& $conf['defaultkey'!=''{
  138.             return $conf['defaultkey'];
  139.         }
  140.         throw new jException('jelix~auth.error.key.empty');
  141.     }
  142. }

Documentation generated on Mon, 26 Oct 2015 21:52:27 +0100 by phpDocumentor 1.4.3