zoukankan      html  css  js  c++  java
  • Aes CBC加密

     1 <?php
     2 namespace appcomponents;
     3 use yii;
     4 class Aes
     5 {
     6     /**
     7      * This was AES-128 / CBC / PKCS5Padding
     8      * return base64_encode string
     9      * @param string $plaintext
    10      * @param string $key
    11      * @return string
    12      */
    13     public static function AesEncrypt($plaintext,$key = null)
    14     {
    15         $plaintext = trim($plaintext);
    16         if ($plaintext == '') return '';
    17         $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    18 
    19         //PKCS5Padding
    20         $padding = $size - strlen($plaintext) % $size;
    21         // 添加Padding
    22         $plaintext .= str_repeat(chr($padding), $padding);
    23 
    24 
    25         $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
    26         $key=self::substr($key, 0, mcrypt_enc_get_key_size($module));
    27         $iv = $key;
    28         // str_repeat($key, $size);
    29         /* Intialize encryption */
    30         mcrypt_generic_init($module, $key, $iv);
    31 
    32 
    33         /* Encrypt data */
    34         $encrypted = mcrypt_generic($module, $plaintext);
    35         /* Terminate encryption handler */
    36         mcrypt_generic_deinit($module);
    37         mcrypt_module_close($module);
    38         return base64_encode($encrypted);
    39     }
    40     /**
    41      * Returns the length of the given string.
    42      * If available uses the multibyte string function mb_strlen.
    43      * @param string $string the string being measured for length
    44      * @return integer the length of the string
    45      */
    46     private static function strlen($string)
    47     {
    48         return extension_loaded('mbstring') ? mb_strlen($string,'8bit') : strlen($string);
    49     }
    50 
    51 
    52     /**
    53      * Returns the portion of string specified by the start and length parameters.
    54      * If available uses the multibyte string function mb_substr
    55      * @param string $string the input string. Must be one character or longer.
    56      * @param integer $start the starting position
    57      * @param integer $length the desired portion length
    58      * @return string the extracted part of string, or FALSE on failure or an empty string.
    59      */
    60     private static function substr($string,$start,$length)
    61     {
    62         return extension_loaded('mbstring') ? mb_substr($string,$start,$length,'8bit') : substr($string,$start,$length);
    63     }
    64     /**
    65      * This was AES-128 / CBC / PKCS5Padding
    66      * @param string $encrypted     base64_encode encrypted string
    67      * @param string $key
    68      * @throws CException
    69      * @return string
    70      */
    71     public static function AesDecrypt($encrypted, $key = null)
    72     {
    73         if ($encrypted == '') return '';
    74         $ciphertext_dec = base64_decode($encrypted);
    75         $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
    76         $key=self::substr($key, 0, mcrypt_enc_get_key_size($module));
    77         $iv = $key;
    78         // str_repeat($key, 16);    //解密的初始化向量要和加密时一样。
    79         /* Initialize encryption module for decryption */
    80         mcrypt_generic_init($module, $key, $iv);
    81 
    82 
    83         /* Decrypt encrypted string */
    84         $decrypted = mdecrypt_generic($module, $ciphertext_dec);
    85 
    86         /* Terminate decryption handle and close module */
    87         mcrypt_generic_deinit($module);
    88         mcrypt_module_close($module);
    89         // echo $decrypted;die;
    90         //$a = rtrim($decrypted,"");
    91         return rtrim($decrypted,"");
    92     }
    93 }
  • 相关阅读:
    Android开发之 Android 的基本组件的概述
    Android开发之 Android应用程序详细解析
    Android开发之 Android应用程序目录结构解析
    第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
    Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)
    Android开发之 Windows环境下通过Eclipse创建的第一个安卓应用程序(图文详细步骤)
    Android 开发之 Android 开发的起步
    Github学习进阶-初露锋芒,通过命令行将本地git仓库推送到Github上面的仓库
    Windows环境下maven 安装与环境变量配置
    Github学习之路-小试牛刀,练习Git 的基本操作
  • 原文地址:https://www.cnblogs.com/lixiansen/p/9579165.html
Copyright © 2011-2022 走看看