zoukankan      html  css  js  c++  java
  • PHP DES加密解密

    自定义密码加密解密函数,源自网友,记录保存一下。

     1 <?php
     2 /**
     3  * DES加密解密
     4  */
     5 class Mcrypt{
     6     
     7     public function __construct(){}
     8     
     9     function getSKey($msg) {
    10         if(!$msg) {
    11             die('请输入参数值');
    12         }
    13         /* 打开加密算法和模式 */
    14         $td = mcrypt_module_open('des', '', 'ecb', '');
    15         /* 创建初始向量,并且检测密钥长度。 Windows 平台请使用 MCRYPT_RAND。 */
    16         $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
    17         $ks = mcrypt_enc_get_key_size($td);
    18         /* 创建密钥 */
    19         $key = substr(md5($msg), 0, $ks);
    20         /* 并且关闭模块 */
    21         mcrypt_module_close($td);
    22         return $key;
    23     }
    24     
    25     /**
    26      *
    27      * 加密函数
    28      * 算法:des
    29      * 加密模式:ecb
    30      * 补齐方法:PKCS5
    31      *
    32      * @param unknown_type $input
    33      */
    34     public function encryptDesEcbPKCS5($input, $key)
    35     {
    36         $size = mcrypt_get_block_size('des', 'ecb');
    37         $input = $this->pkcs5_pad($input, $size);
    38         $td = mcrypt_module_open('des', '', 'ecb', '');
    39         //获取密钥的最大长度
    40         $ks = mcrypt_enc_get_key_size($td);
    41         $key = substr($key, 0, $ks);
    42         //加密向量值
    43         $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    44         //$iv =0;
    45         $tmp = mcrypt_generic_init($td, $key, $iv);
    46         $data = mcrypt_generic ($td, $input);
    47         mcrypt_generic_deinit($td);
    48         mcrypt_module_close($td);
    49         return $data;
    50     }
    51     
    52     /**
    53      * 解密函数
    54      * 算法:des
    55      * 加密模式:ecb
    56      * 补齐方法:PKCS5
    57      * @param unknown_type $input
    58      */
    59     public function decryptDesEcbPKCS5($input, $key)
    60     {
    61         $size = mcrypt_get_block_size('des', 'ecb');
    62         $td = mcrypt_module_open('des', '', 'ecb', '');
    63         /*获取密钥的最大长度*/
    64         $ks = mcrypt_enc_get_key_size($td);
    65         $key = substr($key, 0, $ks);
    66         $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    67         mcrypt_generic_init($td, $key, $iv);
    68         $data = mdecrypt_generic($td, $input);
    69         mcrypt_generic_deinit($td);
    70         mcrypt_module_close($td);
    71         $data = $this->pkcs5_unpad($data, $size);
    72         return $data;
    73     }
    74     
    75     private function pkcs5_pad($text, $blocksize)
    76     {
    77         $pad = $blocksize - (strlen($text) % $blocksize);
    78         return $text . str_repeat(chr($pad), $pad);
    79     }
    80     
    81     private function pkcs5_unpad($text)
    82     {
    83         $pad = ord($text{strlen($text) - 1});
    84         if ($pad > strlen($text))
    85             return false;
    86             if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)
    87                 return false;
    88                 return substr($text, 0, -1 * $pad);
    89     }
    90     
    91 }
  • 相关阅读:
    Mysql查询正在运行的事务
    linux SVN添加新用户
    linux下安装php扩展amqp
    解决apache启动错误:Could not reliably determine the server's fully qualified domain name
    linux系统安装redis服务器与php redis扩展
    navicat导出数据库字典
    centos安装GD库失败
    Mysql实现主从同步
    计算机的本质
    windows下nginx访问web目录提示403 Forbidden
  • 原文地址:https://www.cnblogs.com/laushow/p/9086745.html
Copyright © 2011-2022 走看看