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 }

猜你喜欢

转载自www.cnblogs.com/laushow/p/9086745.html