PHP DES加密解密

自定義密碼加密解密函數,源自網友,記錄保存一下。php

 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 }
相關文章
相關標籤/搜索