>  기사  >  백엔드 개발  >  PHP aes算法

PHP aes算法

WBOY
WBOY원래의
2016-07-25 08:51:081074검색
PHP aes算法
                   
                               
                                       
                                       
            
  1. function aes128cbcEncrypt($key, $text)
  2. {
  3.     /**
  4.      * Open the cipher
  5.      */
  6.     $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
  7.     if (! $td)
  8.     {
  9.         throw new GeneralSecurityException('Invalid mcrypt cipher, check your libmcrypt library and php-mcrypt extention');
  10.     }
  11.     // replaced MCRYPT_DEV_RANDOM with MCRYPT_RAND since windows doesn't have /dev/rand :)
  12.     srand((double)microtime() * 1000000);
  13.     $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  14.     /**
  15.      * Intialize encryption
  16.      */
  17.     mcrypt_generic_init($td, $key, $iv);
  18.     /**
  19.      * Encrypt data
  20.      */
  21.     $encrypted = mcrypt_generic($td, $text);
  22.     /**
  23.      * Terminate encryption handler
  24.      */
  25.     mcrypt_generic_deinit($td);
  26.     /**
  27.      * AES-128-CBC encryption.  The IV is returned as the first 16 bytes  
  28.      * of the cipher text.
  29.      */
  30.     return $iv . $encrypted;
  31. }
  32. function aes128cbcDecrypt($key, $encrypted_text)
  33. {
  34.     /**
  35.      * Open the cipher
  36.      */
  37.     $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
  38.     if (is_callable('mb_substr'))
  39.     {
  40.         $iv = mb_substr($encrypted_text, 0, Crypto_CIPHER_BLOCK_SIZE, 'latin1');
  41.     }
  42.     else
  43.     {
  44.         $iv = substr($encrypted_text, 0, Crypto_CIPHER_BLOCK_SIZE);
  45.     }
  46.     /**
  47.      * Initialize encryption module for decryption
  48.      */
  49.     mcrypt_generic_init($td, $key, $iv);
  50.     /**
  51.      * Decrypt encrypted string
  52.      */
  53.     if (is_callable('mb_substr'))
  54.     {
  55.         $encrypted = mb_substr($encrypted_text, Crypto_CIPHER_BLOCK_SIZE, mb_strlen($encrypted_text, 'latin1'), 'latin1');
  56.     }
  57.     else
  58.     {
  59.         $encrypted = substr($encrypted_text, Crypto_CIPHER_BLOCK_SIZE);
  60.     }
  61.     $decrypted = mdecrypt_generic($td, $encrypted);
  62.     /**
  63.      * Terminate decryption handle and close module
  64.      */
  65.     mcrypt_generic_deinit($td);
  66.     mcrypt_module_close($td);
  67.     /**
  68.      * Show string
  69.      */
  70.     return trim($decrypted);
  71. }
  72. define('Crypto_CIPHER_BLOCK_SIZE', 16);
  73. $a = aes128cbcEncrypt('pass', 'this is text');
  74. echo base64_encode($a) . "/r/n";
  75. $b = aes128cbcDecrypt('pass', $a);
  76. echo $b . "/r/n";
  77. $c = aes128cbcDecrypt('pass', base64_decode(base64_encode($a)));
  78. echo $c . "/r/n";
  79. ?>
复制代码


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.