自定義密碼加密解密函數,源自網友,記錄保存一下。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 }